从firebase快照返回未定义的对象

时间:2015-08-11 18:18:09

标签: firebase polymer-1.0

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

    _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;
    },

1 个答案:

答案 0 :(得分:2)

数据是从Firebase异步加载的。因此,您会注意到第二个console.log()显示在第一个 var list = _getById({ groupId: 42}); console.log("Our list is: "+list); 之前。您无法返回异步加载的数据。

您必须改变编码方式。而不是"获取id,然后用它来做某事",你需要在每次加载/更改id时做某事"。

所以而不是:

 _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;
},

您' 11:

_getById()

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

一些进一步的阅读材料: