繁体   English   中英

如何使用 Promises.all 重写 function 以进行异步和等待

[英]How to rewrite a function using Promises.all to async and await

我有一个 function,它接受一组 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的多次调用开始类似于回调,即使我使用的是承诺。

有没有办法将 map 的功能Promise.all asyncawait以简化此 function?

我该怎么做呢?

你可以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)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM