Promise.all返回值

时间:2020-02-26 08:54:36

标签: javascript async-await

我正在尝试建立一个对象数组,其中某些字段需要远程数据。循环内所有这些都可以使用,但是我对此进行了优化。我写了以下概念证明:

async function p1(x) { // the first remote data
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(`p1-${x}`);
    }, 250);
  });
}

async function p2(x) { // the second remote data
  return new Promise((resolve) => {
    setTimeout( () => {
      resolve(`p2-${x}`);
    }, 250);
  });
}

async function t(n) {
  return { a: await p1(n), b: await p2(n), c: n };
}

async function r() {
  const results = new Map();
  for (let n = 0; n < 2; n++) {
    results.set(n, t(n));
  }
  await Promise.all(results.values());
  console.log('in function', results);
  return results;
}

(async () => {
  const answers = await r();
  console.log('answers', JSON.stringify(answers));
})().catch((e) => {
  console.log(e);
});

这是运行节点(13.x)的输出:

in function Map(2) {
  0 => Promise { { a: 'p1-0', b: 'p2-0', c: 0 } },
  1 => Promise { { a: 'p1-1', b: 'p2-1', c: 1 } }
}
answers {}

所以我的函数r()似乎做对了,但是返回的值是空的。我不明白什么?

0 个答案:

没有答案
相关问题