javascript - Firebase .on ('value' ) 代码块未在云函数内执行。有什么建议可以解决吗?

标签 javascript node.js firebase google-cloud-functions

我发现当我将它放在 .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/

相关文章:

javascript - 使用await 调用异步函数而不阻塞线程

javascript - 当不支持 JavaScript 时,我可以使用 Node.js 'mirror' 作为回退吗?

javascript - 为什么在 SelectBox 中添加整个数组元素而不是仅添加新元素

javascript - 从 JSON 获取数据并使用 Angular 对其进行过滤

javascript - 与 socket.io 相关的可扩展性问题

javascript - 在javascript中定义对象

android - 将 GCM 升级到 FCM 服务器报告 MismatchSenderId 错误

ios - 找不到 Firebase 模块 "Objective C Project"

javascript - firebase.auth().onAuthStateChanged 不工作

javascript - jQuery 在渲染元素后停止监听点击