Как переписать функцию с помощью Promises.all на asyn c и ждать - PullRequest
0 голосов
/ 05 мая 2020

У меня есть функция, которая принимает массив URL-адресов и загружает их. Это выглядит так:

const loadFiles = filePaths => {
  return new Promise((resolve, reject) => {
    let fetchPromises = filePaths.map(filePath => fetch(filePath))

    Promise.all(fetchPromises).then(fetchResolves => {
      let textPromises = []
      fetchResolves.forEach(fetchResolve => {
        if (!fetchResolve.ok) {
          return reject(`${fetchResolve.statusText} : ${unescape(fetchResolve.url)}`)
        }

        textPromises.push(fetchResolve.text())
      })
      Promise.all(textPromises).then(resolve)
    })
  })
}

export {loadFiles}

Проблема, с которой я сталкиваюсь, заключается в том, что несколько вызовов Promise.all начинают напоминать обратные вызовы, хотя я использую обещания.

Есть ли способ сопоставить функциональность Promise.all с async и await, чтобы упростить эту функцию?

Как мне это сделать?

1 Ответ

3 голосов
/ 05 мая 2020

Вы можете await Promise.all нормально. Пример:

async function loadFiles(filePaths) {
    let fetchPromises = filePaths.map(filePath => fetch(filePath))
    let fetchResolves = await Promise.all(fetchPromises)

    let textPromises = []
    fetchResolves.forEach(fetchResolve => {
        if (!fetchResolve.ok) {
            throw new Error(`${fetchResolve.statusText} : ${unescape(fetchResolve.url)}`)
        }

        textPromises.push(fetchResolve.text())
    })

    return Promise.all(textPromises)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...