Как ждать завершения диспетчерского действия? - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь дождаться завершения отправки, но сейчас не могу. в основном я пытаюсь удалить массив документов в 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

  }
};


Я возвращаюсь из обещания. Все (), но оно не ждет, я использую ключевое слово await в асинхронной программе, но оно не возвращает обещание, поэтому promise.all () не ждет, несмотря на использование команды await и ее возврат. Как я могу сделать так, чтобы этот оператор proms.all () возвращал обещание моему коду, в котором функция закрыта. так что вызывающая функция ожидает завершения обещания. Я хочу, чтобы этот оператор proms.all () возвращал значение обещания коду, в котором он вызывается, чтобы я мог использовать await, чтобы остановить выполнение кода до завершения текущей функции

Я хочу, чтобы функция в цикле for выполнялась одна за другой последовательным образом после завершения выполнения каждой функции. что я не могу сейчас сделать.

Спасибо за ваше время.

1 Ответ

0 голосов
/ 24 июня 2019

вы можете подождать 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):
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...