如何兑现诺言

时间:2020-01-27 10:36:49

标签: 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],但我会尽量避免这种情况。

2 个答案:

答案 0 :(得分:1)

使用点差运算符

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());
})();

答案 1 :(得分:0)

这应该对您有帮助。

const input = [[{}, {}, {}], [{"hi": "bye"}]];


console.log(input.flat());