Firebase .on('value') 代码块未在云函数中执行。有什么建议要解决吗?



我发现,当我将其放在.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);
        });
    });
})

如果您要使用云功能,则实际上还必须了解如何使用承诺。

相关内容

  • 没有找到相关文章

最新更新