javascript 如何使promise变平,所有响应

i5desfxk  于 12个月前  发布在  Java
关注(0)|答案(3)|浏览(106)

我有一个产品列表,并为每个产品即时通讯作出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],但我试图避免,如果可能的话。

oprakyz7

oprakyz71#

使用spread运算符

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

gblwokeq2#

这应该对你有帮助

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


console.log(input.flat());
g2ieeal7

g2ieeal73#

Array.flatMap()Array.map().flat()相同。因此await Promise.all(Array.map().flat())将应用于flat的结果。当map回调是异步的时,您需要在调用flat之前解析map的结果。在这种情况下,您需要使用(await Promise.all(Array.map())).flat()

相关问题