聚合物Firebase:打印异步数据
用firebase试用聚合物0.8。我无法打印正在异步绑定的数据聚合物Firebase:打印异步数据,firebase,polymer,Firebase,Polymer,用firebase试用聚合物0.8。我无法打印正在异步绑定的数据 <dom-module id="card-user"> <template> <div>{{name}}</div> </template> </dom-module> 无法返回异步加载的值 您的getFirebase方法将在Firebase加载完成和打开(“值”回调触发之前退出(并返回undefined) 如果向该函数添加一些日志记录,则最
<dom-module id="card-user">
<template>
<div>{{name}}</div>
</template>
</dom-module>
无法返回异步加载的值 您的
getFirebase
方法将在Firebase加载完成和打开(“值”
回调触发之前退出(并返回undefined
)
如果向该函数添加一些日志记录,则最容易看到:
getFirebaseName: function(id) {
var ref = new Firebase('https://xxx.firebaseio.com/users/' + id + '/name');
console.log("Start loading value from Firebase");
ref.once("value", function(snapshot) {
console.log("Value gotten from Firebase");
return snapshot.val();
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
console.log("Returning from getFirebaseName");
}
您将在JavaScript控制台中看到:
Start loading from Firebase
Returning from getFirebaseName
Value gotten from Firebase
直观地说,您可能期望最后两行被交换。但异步加载的工作原理并非如此:Firebase开始加载数据,但由于这可能需要相当长的时间,浏览器只需在加载后继续执行代码
一个典型的解决方案是对回调中的值执行任何您想执行的操作:
getFirebaseName: function(id) {
var ref = new Firebase('https://xxx.firebaseio.com/users/' + id + '/name');
ref.once("value", function(snapshot) {
console.log(snapshot.val());
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
}
我们现在在这里记录snapshot.val()
当然,您也可以将新值添加/设置到DOM中
你也可以考虑回信,但我会把这个留给其他人解释
看看这个答案或其中的一些链接:。人们经常被这种反直觉的行为所困扰,阅读别人的经验,答案也可能对你有所帮助
getFirebaseName: function(id) {
var ref = new Firebase('https://xxx.firebaseio.com/users/' + id + '/name');
ref.once("value", function(snapshot) {
console.log(snapshot.val());
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
}