我有一个产品列表,对于每个产品,我都会调用 api 来获取产品订阅。
const subscriptions = await Promise.all(products.flatMap((p: any) => {
const { username, password } = p.credentials;
return GetSubscription(username, password);
}));
console.log(subscriptions);
实际:
[ [ {}, {}, {}, ] ]
现在你可以看到我这里有一个双重嵌套数组,我不需要外部数组,我怎样才能展平这个数组,我假设在这里使用 flatMap 可能对我有帮助,但它没有。
预期:
[ {}, {}, {}, ]
当然,我可以简单地执行subscriptions[0]
,但我会尽可能避免这种情况。
最佳答案
使用扩展运算符
async function func() {
return 'A';
}
(async() => {
const [...ret] = await Promise.all([
func(),
func(),
func(),
]);
console.log(ret);
})();
或者
async function func() {
return 'A';
}
(async() => {
const ret = await Promise.all([
func(),
func(),
func(),
]);
console.log(ret.reduce((tmp, x) => [...tmp, x], []));
})();
正如您在评论中所说,在 tsconfig 中指定 ES2019,您可以使用 Array.flat
:
async function func() {
return 'A';
}
(async() => {
const ret = await Promise.all([
func(),
func(),
func(),
]);
console.log(ret.flat());
})();
关于javascript - 如何平息 Promise.all 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59929414/