此代码可以正常工作:
services.map(async svc => {
promises.push(new Promise(async (resolve) => {
html += `<h2>${svc}</h2>`;
let journeyDetails = await admin.database().ref(`data`).once('value');
resolve();
}));
});
await Promise.all(promises).then(() => {
return res.send(html);
})
为什么下面的代码不起作用?在我看来是一样的,但是执行顺序现在不正确。
Promise.all([
services.map(async svc => {
new Promise(async (resolve) => {
html += `<h2>${svc}</h2>`;
let journeyDetails = await admin.database().ref(`data`).once('value');
resolve();
})
})
]).then(() => {
// done - called before finished in this version
}).catch(() => {
// err
});
答案 0 :(得分:2)
我认为您的代码不起作用的主要原因是您将数组([services.map(...)]
)传递给Promise.all
,而不是诺言的数组。
但是,代码过于复杂。无需在async
函数内部创建诺言,async
函数总是返回诺言。应该是:
Promise.all( // <- note the removed [...]
services.map(async svc => {
html += `<h2>${svc}</h2>`;
let journeyDetails = await admin.database().ref(`data`).once('value');
// more code here
})
)