我正在尝试建立一个对象数组,其中某些字段需要远程数据。循环内所有这些都可以使用,但是我对此进行了优化。我写了以下概念证明:
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()似乎做对了,但是返回的值是空的。我不明白什么?