ES7 使用等待生成器从一系列承诺中获取结果
ES7 Getting result from an array of promises using await generator
给定一组 promises,在 ES7 中获取结果的惯用方法是什么?
这是我想要做的:
async function getImports() {
let imports = [System.import('./package1.js'), System.import('./package2.js')];
let promises = await* imports;
let results = [];
await promises.forEach(val => val.then(data => results.push(data))); //seems hacky
console.log(results); // array of 2 resolved imports
}
结果是正确的,但我仍在做 forEach
和 then
以将已解决的承诺变成结果。这对我来说似乎不对。有没有更清洁的方法?
正如您提交的问题中提到的,核心问题是 await*
不再存在并且已被删除。不幸的是,它没有在 Babel 6 中正确地抛出语法错误,并且基本上被当作正常的 await
.
您需要明确
let [p1, p2] = await Promise.all([
System.import('./package1.js'), System.import('./package2.js')]);
我不敢相信它真的有效,forEach
可以 return undefined
而你不能 await
。如果您需要一个循环,请使用 map
获取一组(承诺的)结果。
在你的情况下,你似乎在寻找一个简单的
async function getImports() {
let promises = [System.import('./package1.js'), System.import('./package2.js')];
let results = await Promise.all(promises)
console.log(results);
}
这样做的一种方法....
async function abc() {
let p1 = getReviews();
let p2 = getMenu();
let [reviews, menu] = await results(p1, p2);
}
function results(...rest) {
return Promise.all(rest).catch(err => console.log(err));
}
给定一组 promises,在 ES7 中获取结果的惯用方法是什么?
这是我想要做的:
async function getImports() {
let imports = [System.import('./package1.js'), System.import('./package2.js')];
let promises = await* imports;
let results = [];
await promises.forEach(val => val.then(data => results.push(data))); //seems hacky
console.log(results); // array of 2 resolved imports
}
结果是正确的,但我仍在做 forEach
和 then
以将已解决的承诺变成结果。这对我来说似乎不对。有没有更清洁的方法?
正如您提交的问题中提到的,核心问题是 await*
不再存在并且已被删除。不幸的是,它没有在 Babel 6 中正确地抛出语法错误,并且基本上被当作正常的 await
.
您需要明确
let [p1, p2] = await Promise.all([
System.import('./package1.js'), System.import('./package2.js')]);
我不敢相信它真的有效,forEach
可以 return undefined
而你不能 await
。如果您需要一个循环,请使用 map
获取一组(承诺的)结果。
在你的情况下,你似乎在寻找一个简单的
async function getImports() {
let promises = [System.import('./package1.js'), System.import('./package2.js')];
let results = await Promise.all(promises)
console.log(results);
}
这样做的一种方法....
async function abc() {
let p1 = getReviews();
let p2 = getMenu();
let [reviews, menu] = await results(p1, p2);
}
function results(...rest) {
return Promise.all(rest).catch(err => console.log(err));
}