为什么if条件中的代码即使不应该使用react和javascript也会执行



只有当某些条件为真时,我才想执行对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

相关内容

最新更新