gra*_*dev 1 javascript async-await
我已经查看了几个关于在 forEach 循环中使用 async/await 的问题,但似乎没有任何内容涵盖我的用户案例......我怎样才能让下面的代码工作?现在我收到以下错误:
await 是一个保留字
这是代码:
export const fetchUserBookmarks = ( bookmarksIDs ) => async ( dispatch, getState, api ) => {
dispatch({
type: 'IS_FETCHING_BOOKMARKS'
});
try {
bookmarks = [];
bookmarksIDs.forEach( bookmarkID => {
const bookmark = await api.get( selectedPostByIdEP + bookmarkID );
bookmarks.push( bookmark );
});
dispatch({
type: 'HAS_FETCHED_BOOKMARKS',
payload: bookmarks
});
} catch( error ) {
dispatch({
type: 'FAILED_FETCHING_BOOKMARKS',
payload: error
});
}
}
Run Code Online (Sandbox Code Playgroud)
首先,要使用await您应该将函数声明为async. 您已使用外部函数完成此操作,但未使用内部函数完成此操作。
更改将如下所示:
bookmarksIDs.forEach(async bookmarkID => {
Run Code Online (Sandbox Code Playgroud)
其次,您可能想要并行运行这些 api 调用。
您可以forEach用一个map电话替换并一起等待所有结果承诺。
为此,您的代码应如下所示:
const bookmarks = await Promise.all(
bookmarksIDs.map(bookmarkID =>
api.get( selectedPostByIdEP + bookmarkID )
)
);
Run Code Online (Sandbox Code Playgroud)
——
似乎如果bookmarks没有在其他任何地方声明它会导致问题。使用const或let应该解决这个问题。
| 归档时间: |
|
| 查看次数: |
10527 次 |
| 最近记录: |