我发现,当我将其放在.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')
块之前和之后获取控制台日志,因此函数正在执行,而不是on('value')
代码块。
使用云功能,您需要返回承诺(请注意代码示例中的注释),该函数在函数中完成所有异步工作时就可以解决。一次()执行异步并返回诺言,因此您应该返回其诺言,以便云功能知道何时清理。
另外,在数据可用时可能更容易使用()继续您的工作。
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);
});
});
})
如果您要使用云功能,则实际上还必须了解如何使用承诺。