我正在开发一个 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)
}
}
答案 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
函数中。
上面做了系列中的删除(一个接一个),在我看来这正是你想要的。但为了以防万一,您可以使用 map
和 Promise.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
的环境中。