我实现了一个函数,我希望返回一个保存在某个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;
},
答案 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
,并在列表加载时(以及每当列表更改时)调用该回调。
一些进一步的阅读材料: