我正在使用EJS模板来呈现页面。我用来呈现页面的数据是从Firebase数据存储中提取的对象。
访问数据存储的方法是utils
对象的属性。数据从Firebase中提取,数据存储中的每个元素都添加到box
数组中。
pullFromFirebase()
的结果设置为另一个js文件中定义的data
变量。我希望Firebase返回的对象框可用于data
。 data
最终会被输入到我的模板的渲染方法中。
尝试在页面加载时通过utils.box
变量返回data
来访问undefined
。我知道box
包含来自Firebase的元素;如果我在console.log(box);
中的for
循环之后pullFromFirebase
,则会返回框内容。
同样,如果使用pullFromFirebase
从控制台调用utils.pullFromFirebase();
,则还会返回box
的内容。从控制台调用data();
也会返回box
。
如何通过pullFromFirebase
以编程方式访问从data();
返回的对象?
// file1.js
var db = new Firebase('firebaseURL');
var data = utils.pullFromFirebase(); // data(); returns 'undefined'
// file2.js
var utils = {
pullFromFirebase: function () {
db.on("value", function(snapshot) {
var notebook = snapshot.val();
var box = [];
for (list in notebook) {
box.push(notebook[list]);
}
utils.box = box;
});
return utils.box;
}
};
utils
的任何其他属性都会成功返回。仅返回box
个对象。如果我console.dir(utils);
,我会将box
视为utils
的属性及其值。所以,当我看到box
时,我无法触及box
。
答案 0 :(得分:0)
由于utils.pullFromFirebase
正在对数据库进行异步调用,因此它应该至少接受一个回调函数来对box
中返回的值执行一些有用的操作。
//file1.js
var db = new Firebase('firebaseURL'), data;
utils.pullFromFirebase(
function (result) {
data = result; /* When the call to the database returns, data variable is set to the results of that call. */
});
//file2.js
var utils = {
pullFromFirebase: function (callback) {
db.on("value", function(snapshot) {
var notebook = snapshot.val();
var box = [];
for (list in notebook) {
box.push(notebook[list]);
}
utils.box = box;
callback(box); /* Callback function is called with the database results. */
});
}
};