javascript - 为什么 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
工作原理。因此,如果您传递一个空的承诺数组,那么它会立即执行处理程序(因为没有更多的承诺要等待)链接到文档:https ://developer.mozilla.org/uk/docs/Web/JavaScript/Reference /Global_Objects/承诺/全部
如果你不想在这种情况下执行它,你可以用 if 这样的条件包装它
if(valuesPromises.length > 0) {
await Promise.all(valuesPromises).then(async () => {
params.is_item = isItem;
await this.patch('/api/items/${itemId}/', params);
});
}
PS 从描述中我看到你的 if 检查中存在问题,values.length
而不是values.create.length
在 Promise 中检查。
推荐阅读
- shopify - 将表单数据提交到自定义页面以发送电子邮件
- php - 大于/小于 BOTH 的 PHP 运算符在相同的数字上触发
- java - 使用 jUnit 测试接口
- database - 在哪里存储对其他数据模型(在 mongoDB 中)的引用以获得最佳性能
- asp.net - 获取按钮单击时所有选中复选框的值
- javafx - 鼠标中键单击时的 TableView 行选择
- algorithm - 使贪婪算法在欧元硬币子集上失败
- r - Tidyquant:从每个日期(不仅仅是每月)获取跟踪月度回报
- react-native - React Native:以 Modal 显示 FlatList 数据
- ios - 如何在 SceneKit 中简单地旋转 SCNNode?