pro*_*zac 6 firebase firebase-realtime-database
async/await似乎不适用于firebase forEach.此代码为快照的第一个子项运行console.log,然后挂起.这是一个错误还是我错过了什么?
main()
async function main() {
const snap = await root.ref('somepath')
.once('value')
snap.forEach(async val => {
await console.log(val.key)
})
}
Run Code Online (Sandbox Code Playgroud)
这是一个功能的无意结果,有时会被称为错误.从firebase文档:

一个async函数总是返回的承诺.承诺是真实的价值:
!!Promise.resolve===true.
作为解决方法,请尝试此解决方案:
main()
async function main() {
const snap = await root.ref('somepath')
.once('value')
snap.forEach(function wrapper(){async val => {
await console.log(val.key)
}})
Run Code Online (Sandbox Code Playgroud)
在转移到下一个快照之前,它不会等待承诺完成.这需要更多的代码,但这可能不是你需要的.
我用这样的东西:
import * as admin from "firebase-admin";
type FunctionOnDataSnapshot = (childSnapshot: admin.database.DataSnapshot) => Promise<any>;
export const asyncForEach = async (dataSnapshot: admin.database.DataSnapshot, childFunction: FunctionOnDataSnapshot) => {
const toWait = [];
dataSnapshot.forEach(childSnapshot => {
toWait.push(childFunction((childSnapshot)));
});
await Promise.all(toWait);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2757 次 |
| 最近记录: |