只有当某些条件为真时,我才想执行对API的补丁请求。
这是我的代码:
async createItem({params: {
isItem,
values,
}} {
const params: any = {};
try {
const {data: item} = await this.post('/${items}/',params);
};
itemId = item.id;
const valuesPromises = values.create.map({variable, value}) =>
this.post('/api/values/', {
variable,
value,
item: itemId,
})
);
await Promise.all(valuesPromises).then(async () => {
if (isItem && values.length > 0 ) {
params.is_item = isItem;
await this.patch('/api/items/${itemId}/', params);
)
});
return item;
}
问题是,即使values.length
为0,对API的补丁请求仍然会发生。我不希望执行if块中的代码。我不确定问题出在哪里。
有人能帮我吗?谢谢
首先,您需要了解Promise.all
是如何工作的。因此,如果您传递一个空的promise数组,那么它会立即执行处理程序(因为没有更多的promise等待(文档链接:https://developer.mozilla.org/uk/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
如果你不想在这种情况下执行它,你可以用类似的条件来包装它
if(valuesPromises.length > 0) {
await Promise.all(valuesPromises).then(async () => {
params.is_item = isItem;
await this.patch('/api/items/${itemId}/', params);
});
}
附言:从描述中,我看到你的if检查中存在问题,因为你在承诺中检查values.length
而不是values.create.length
。