javascript - 防止代码在 forEach 之后执行

标签 javascript reactjs asynchronous async-await

我目前正在尝试在ReactJS + ExpressJS中实现简单的CRUD操作。我有一个异步 onSubmit 方法来处理表单提交。

下面的 foreach 循环应包含一些数组元素检查,如果匿名函数返回 false,应用程序应退出 onSubmit,但 try-catch block 设法在 foreach 完成之前执行。

由于我的 foreach 循环中没有任何真正需要 await 的内容,因此有没有办法“等待”直到它完全完成并执行代码在 try-catch block 内同时保持 onSubmit 方法异步?

    onSubmit = async (e) => {
        e.preventDefault();

        if (something) {
                return false;
        }

        // This foreach gets executed after the try-catch below, but I want it to execute first
        someArr.forEach(item => {
            if (item.arr === undefined || item.arr.length == 0) {
                return false;
            }
        });

        try {
            // This has some await axios.post() calls...
        } catch { }
    }

最佳答案

return forEach 内的声明回调不会阻止 try catch 评估,因为 return语句位于回调内部,因此它从回调返回,而不是外部 onSubmit功能。

如果我理解正确的话,目的是从 onSubmit 返回如果数组中的任何一项满足条件: (item.arr === undefined || item.arr.length == 0)

如果这是正确的,您可以使用 Array.prototype.some 重写它:

onSubmit = async (e) => {
  e.preventDefault();

  if (something) {
    return false;
  }

  const shouldReturn = someArr.some(item => item.arr === undefined || item.arr.length === 0);

  if (shouldReturn) {
    return;
  }

  try {
    // This has some await axios.post() calls...
  } catch { }
}

关于javascript - 防止代码在 forEach 之后执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57132189/

相关文章:

reactjs - 任何人都可以提供 React-Redux Jest 测试的示例吗?

reactjs - Material-UI Next js 链接按钮

c# - Visual Studio 2015 空白应用程序(通用 Windows): CS0731

JavaScript async/await 没有正确等待?

javascript - 如何在一个单独的 div 中加载多个网页?

javascript - Jquery - .append 之后,.hover 在其他元素上不起作用

reactjs - 故事书迁移到 CSF 的 Typescript 问题

c# - 为什么需要对我的数据库进行异步调用?

javascript - 从生成器函数获取先前的值

javascript - 从 URL 中删除 ver 参数 - Wordpress