使用带有 Promise.all() 的配置对象

我正在研究使用 Promise.all() 从多个端点获取数据。使用 Promise.all() 返回一个数组,您可以从该数组中析构项目,例如


const [fetch1, fetch2] = Promise.all(urls.map(url => fetch(url)))

我正在寻找使用配置对象动态命名这些解构项目(name1 和 name2)的方法。


const urls = [

  {

    name: 'google',

    url: 'https://www.google.com'

  },

  {

    name: 'bbc',

    url: 'https://www.bbc.co.uk'

  }

]


const [google, bbc] = Promise.all(urls.map(url => fetch(url.url)))

在上述示例中,从 promise.all 解构的项目应使用 urls 数组中的名称,即 urls.name


本质上,我正在寻找一种方法来在传递给 promise.all() 的配置对象中命名我的导出


主要原因是从这些 promise 返回的数据是在 urls 配置对象中指定的名称下键入的。所以我们也可以


const data = Promise.all(urls.map(url => fetch(url.url)))

console.log(data.google || data.bbc)


凤凰求蛊
浏览 86回答 1
1回答

温温酱

这应该这样做:const fetchUrl = (url) => fetch(url.url).then((response) => ({ [url.name]: response }));const mergeResults = (results) => results.reduce(  (mergedResults, result) => ({ ...mergedResults, ...result }),  {});const data = Promise  .all(urls.map(fetchUrl))  .then(mergeResults)  .then((data) => {    console.log(data.google || data.bbc);  });伯吉的更新:const data = Promise  .all(urls.map(fetchUrl)) // same as above  .then((results) => Object.assign({}, ...results)) // elegance++  .then((data) => {    console.log(data.google || data.bbc);  });
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript