如何等待调度动作完成?

时间:2019-06-24 10:34:55

标签: reactjs redux google-cloud-firestore

我试图等待调度动作完成,但目前无法执行。 基本上,我正在尝试删除Firestore中的一系列文档。但是我想等待每个异步函数完成之后再在for循环中执行下一个函数,但是我无法从异步函数中返回诺言。 我如何等待每个功能完成,以便只有下一个功能才能执行

我尝试使用await返回异步代码,但未成功

用于执行程序的代码


for(let i=0;i<this.state.createdAtList.length;i++){
await this.props.UserDataDelete(this.state.createdAtList[i],  uniq[i], this.state.toDel[i], email)
}

UserDataDelete 函数


export const UserDataDelete = (createdAt, DocumentsId, SessionId, email) => {

  return async(dispatch,  getState, {getFirestore}) => {


return await Promise.all([  firestore.collection('hello').doc(email).collection('sessions').doc(SessionId).delete().then(()=> {
  dispatch({ type: 'DELETE_USER_COLLECTION_SUCCESS' });
}).catch(err => {
  dispatch({ type: 'DELETE_USER_COLLECTION_ERROR' }, err);

})
,
 firestore.collection('hello').doc(email).collection('documents').doc(DocumentsId).delete().then(()=> {
  dispatch({ type: 'DELETE_USER_SUCCESS' });
}).catch(err => {
  dispatch({ type: 'DELETE_USER_ERROR' }, err);

})
,

      storage().ref(`hello/${email}/${createdAt}`).delete().then(()=> {
        dispatch({ type: 'DELETE_USER_DATA_SUCCESS' });
      }).catch(err => {
        dispatch({ type: 'DELETE_USER_DATA_ERROR' }, err);
      })])

return true

  }
};


我从promise.all()返回,但是它没有等待,我在异步程序中使用了await关键字,但是没有返回promise, 因此,即使对命令使用了await然后返回它,promise.all()也不会等待。 如何使该promise.all()语句将诺言返回到函数关闭的代码中。以便调用函数等待,直到promise.all()完成。 我希望这个promise.all()语句将一个promise值返回到调用它的代码中,以便我可以使用await来停止代码执行,直到当前函数完成为止

我希望for循环中的函数在每个函数完成执行后以连续的方式一个接一个地执行。 我目前无法执行。

谢谢您的时间。

1 个答案:

答案 0 :(得分:0)

您可以等待1500毫秒= 1.5秒,直到每次迭代完成为止:

for(let i=0;i<this.state.createdAtList.length;i++){
  this.props.UserDataDelete(this.state.createdAtList[i],  uniq[i], this.state.toDel[i],    email);
  sleep(1500):
}