【问题标题】:Returning undefined object from a firebase snapshot从 Firebase 快照返回未定义的对象
【发布时间】:2015-08-11 18:18:09
【问题描述】:

我实现了一个函数,我想返回一个保存在某个 url 下的对象。在下面的代码中,第一个 'console.log(result);'从 firebase 位置返回正确的对象。第二个返回未定义。有人可以解释为什么以及如何解决它吗?

    _getById: function(obj) {
        var url = "https://my-app.firebaseio.com/list/" + obj.groupId;
        console.log(url);
        var ref = new Firebase(url);
        var result = {};
        ref.on("value", function(snapshot) {
                result = snapshot.val(); //first
                console.log(result);
            }, function (errorObject) {
            }
        );
        console.log(result); //second
        return result;
    },

【问题讨论】:

    标签: firebase polymer-1.0


    【解决方案1】:

    数据是从 Firebase 异步加载的。所以你会注意到你的第二个console.log() 显示在第一个之前。您不能返回异步加载的数据。

    您必须改变编码方式。您需要“在加载/更改 id 时做一些事情”,而不是“获取 id,然后用它做某事”。

    所以而不是:

     var list = _getById({ groupId: 42});
     console.log("Our list is: "+list);
    

    你会:

     _getById({ groupId: 42 }, function(list) {
       console.log("Our list is: "+list);
     });
    _getById: function(obj, callback) {
        var url = "https://my-app.firebaseio.com/list/" + obj.groupId;
        console.log(url);
        var ref = new Firebase(url);
        var result = {};
        ref.on("value", function(snapshot) {
            result = snapshot.val(); //first
            callback(result);
        }, function (errorObject) {
        });
        console.log(result); //second
        return result;
    },
    

    在上面的代码中,我们将回调传递给_getById(),并在列表加载时(以及列表更改时)调用该回调。

    一些进一步的阅读材料:

    【讨论】:

      猜你喜欢
      • 2019-03-03
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 2019-07-28
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多