Firebase .on('value')代码块不在内部执行云function。 任何build议要解决?
我发现它真的很奇怪,当我把它放在一个.html文件中时,它会执行相同的代码,并检查控制台日志是否正常,但是当我将完全相同的代码块放入一个不执行的云function中由于某种原因正在被跳过。 我需要做的是从configuration对象获取一些configuration参数,并根据需要使用它们。
var db = admin.database().ref(); var configRef = db.child("config"); configRef.on('value', function(snap){ var snapvalue = snap.val(); var totalLength = Object.keys(snapvalue).length; $.each( snapvalue, function( key, value ) { console.log(value,key); }); });
完成的云function如下所示:
exports.myFunction = functions.database.ref('/object/{list}').onWrite(event =>{ console.log("Inside myFunction..."); var db = admin.database().ref(); var configRef = db.child("config"); configRef.on('value', function(snap){ var snapvalue = snap.val(); $.each( snapvalue, function( key, value ) { console.log(value,key); }); }); console.log("Leaving myFunction..."); })
我得到的控制台日志之前和之后on('value')
块所以function正在执行,但不是on('value')
代码块。
使用云function,您需要返回一个承诺 (请注意代码示例中的注释),以解决在函数中完成所有asynchronous工作时的情况。 once()以asynchronous方式执行并返回一个promise,所以您应该返回它的承诺,以便Cloud Functions知道何时清理。
另外,当数据可用时,使用then()可能会更容易继续工作。
exports.myFunction = functions.database.ref('/object/{list}').onWrite(event => { console.log("Inside myFunction..."); var db = admin.database().ref(); var configRef = db.child("config"); return configRef.once('value').then(snap => { var snapvalue = snap.val(); $.each(snapvalue, function( key, value ) { console.log(value,key); }); }); })
如果您要使用云function,您还必须了解如何使用承诺。
- 如何在不知道Firebase和Firebase-admin中的密钥的情况下让孩子一触即发
- 有没有办法将不同的徽章计数发送给同一主题的不同用户?
- 通过云端function检索Firebase存储图像链接
- Firebase数据检索:我无法从Firebase数据库中创build的json检索数据
- 如何处理“promis”数组
- Firebase admin.auth.createUser错误(nodejs + Typescript + firebase-admin)
- 有没有办法通过我的Node.js服务器发送带有Firebase Admin SDK的validation邮件?
- 使用Node.js和Firebase竞争条件
- 当我的Node.js应用程序处于脱机状态时,是否应将Firebase数据库设置为脱机?