我创建了一个 promise ,它将接受一组 Firebase 键作为输入,循环它们以查询 Firebase 实时数据库。我的问题是,即使在我使用 async wait 之后,为了让 firebase 提供结果,promise 也会很快得到解决。
function firebaseQuery(keys){
const result = [];
return new Promise((resolve, reject) => {
keys.forEach((key) => {
const snap = app.child(key).once('value');
const snapJSON = await snap.then(snapshot => snapshot.toJSON());
result.push({ key: key, post: snapJSON });
console.log(result);
});
resolve(result);
});
}
最佳答案
forEach
不会因等待语句而暂停,因此它不会像这样工作( https://codeburst.io/javascript-async-await-with-foreach-b6ba62bbf404 )。最好将键映射到 Promise 数组中,然后使用 Promise.all() 等待它们全部解析。像这样的事情(只要确保处理你的错误)
async function firebaseQuery(keys){
const result = await Promise.all(keys.map(async key => {
const snap = app.child(key).once('value');
const snapJSON = await snap.then(snapshot => snapshot.toJSON());
const returnValue = { key: key, post: snapJSON };
console.log(returnValue);
return returnValue;
}));
}
关于node.js - promise 不等待 firebase 查询完成并很快得到解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55564980/