意外的保留字“等待”

时间:2021-04-10 12:35:04

标签: javascript reactjs react-native

我正在开发一个 react-native 应用程序。

我有一个 forEach 迭代,其中我使用 await 来等待结果,但我不断收到错误消息:“意外的保留字 'await'”。我不明白为什么?

const removeData = async () => {
    try {
      dataArray.forEach((data) => {
        // What is wrong with my 'await' usage here??? It is a async API
        const deletedData = await API.graphql({ query: deleteData, variables: { input: data } });
       
      })
    } catch (err) {
      console.log('error deleting data:', err)
    }
  }

1 个答案:

答案 0 :(得分:4)

因为它在中的函数不是一个async函数,它是一个非async函数(对forEach的回调)。 await 必须直接位于 async 函数内,¹ 不能位于 async 函数内的同步函数内。

如果您想在那里使用 await,请使用 for-of

const removeData = async () => {
    try {
        // Does the deletions in series (one after the other)
        for (const data of dataArray) {
            const deletedData = await API.graphql({ query: deleteData, variables: { input: data } });
            // ...presumably use `deletedData` here...
        }
    } catch (err) {
        console.log("error deleting data:", err);
    }
};

这样,await 就在 async 函数中。

上面做了系列中的删除(一个接一个),在我看来这正是你想要的。但为了以防万一,您可以使用 mapPromise.all 并行执行操作:

const removeData = async () => {
    try {
        // Does the deletions in parallel (all running together)
        const deletedDataArray = await Promise.all(dataArray.map(
            data => API.graphql({ query: deleteData, variables: { input: data } })
        ));
        // ...presumably use `deletedDataArray` here...
    } catch (err) {
        console.log("error deleting data:", err);
    }
};

¹ 或者在模块的顶层,在支持顶层 await 的环境中。

相关问题