首页 > 解决方案 > 为什么 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 块内的代码执行。我不确定问题出在哪里。

有人可以帮我解决这个问题吗?谢谢。

标签: javascriptreactjs

解决方案


首先,您需要了解其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 中检查。


推荐阅读