我发现当我将它放在 .html 中并检查控制台日志时它执行的同一段代码看起来真的很奇怪,但是当我将完全相同的代码块放在云函数中时不执行并且由于某种原因被跳过。我需要做的就是从配置对象中获取一些配置参数并根据需要使用它们。
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);
});
});
完成的云函数如下所示:
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')
block 之前和之后获取控制台日志,因此函数正在执行但不是 on('value')
代码块。
最佳答案
使用 Cloud Functions,您需要 return a promise (注意代码示例中的注释)在函数中完成所有异步工作时解析。 once() 异步执行并返回一个 promise ,因此您应该返回它的 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);
});
});
})
如果您要使用 Cloud Functions,您真的还必须学习如何使用 promises。
关于javascript - Firebase .on ('value' ) 代码块未在云函数内执行。有什么建议可以解决吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46229990/