我正在研究使用 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)
1 回答
温温酱
TA贡献1752条经验 获得超4个赞
这应该这样做:
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);
});
添加回答
举报
0/150
提交
取消