Как можно дождаться завершения выполнения массива обещаний, чтобы затем сохранить значения, возвращаемые из каждого обещания, в массиве состояний?

#javascript #reactjs #asynchronous #firebase-realtime-database #firebase-storage

#javascript #reactjs #асинхронный #firebase-realtime-database #firebase-хранилище

Вопрос:

 const promises = this.state.selectedFile.map(picture => {
          const ref = Firebase.getStorageRef(`/${picture.name}`);
          return ref
            .put(picture)
            .then(() => ref.getDownloadURL());
        });
  

Приведенный выше код вызывает загрузку списка файлов в хранилище firebase, а затем возвращает его URL.

 Promise.all([promises]).then(
          console.log(promises),
          this.setState({ mage: this.state.mage.concat([promises]) },()=>console.log(this.state.mage)))
  

Затем я попытался передать это const promises , представляющее собой массив обещаний, в качестве параметра Promise.all() , который, как я предполагал, будет ждать, пока все обещания будут выполнены.

Какой подход вы предлагаете?

Комментарии:

1. Promise.all([promises]) -> Promise.all(promises)

2. Всегда используйте Promise.all для таких сценариев или Promise.allSettled(promises) , эта функция возвращает массив результатов со статусом всех обещаний, были ли они разрешены или отклонены

3. Я попробовал (promises), но он говорит, что его невозможно повторить. @tkausl

4. @PiyushRana Попробовал ‘Promise.allSettled ()’ , он выполняется перед массивом обещаний и не ожидает.

5. Вы пробовали это так: const promises = [promises]; const responsions = await Promise.allSettled(обещания); или Promise.allSettled(обещания).then(результаты => {});