javascript - 如何平息 Promise.all 响应

标签 javascript node.js typescript

我有一个产品列表,对于每个产品,我都会调用 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/

相关文章:

javascript - Ng-repeat 中的工具提示

javascript - 如何通过其元素检索父框架名称

javascript - 检测 WebP 支持

javascript - typescript + RequireJs + AngularJs

javascript - Scalejs 和 Kendo UI 能成功集成吗?

javascript - 我只是没有得到 ES6 "promises"

node.js - 在 travis-ci 上设置 postgres 数据库 url 以测试 Node.js 应用程序

json - 使用 API 测试进行 Typescript JSON 模式验证

html - 如何禁用 Angular 匹配

javascript - aws javascript sdk v3 - 签名不匹配错误