我2天前开始使用angularjs(...)我目前正在问自己如何创建一个获取我的firebase数据的函数,并根据子节点返回一个字符串。
我说的时候看起来很简单,但更难做到......
我可以逐个获取数据,但问题是总共有84个孩子!
我的上下文如果一个人在一天中的7天工作,一天晚上工作,一个月中有4个星期(3x7x4 = 84),网站会从firebase中检索。我孩子的一个例子是:Saturday1Night:true,其中“1”表示第1周。
我尝试了什么
function getOneDay(currentUserId, key, query, text){
firebase.database().ref().child('Users').child(currentUserId).child(key).once('value').then(function(snapshot) {
/* query is "Saturday1Night" */
if(datasnapshot.$value === null && datasnapshot.id === null) {
/* not working */
text = 'X';
}else{
/* value is "true", person is working */
text = query;
}
})
return text;
}
现在我真正的问题是,我如何在java中创建一个返回字符串的函数?如何在$ scope中显示它?
HTML
<h1>{{s1n}}</h1>
AngularJS
$scope.s1n = text; //??
$scope.s1n = getOneDay(/*uid*/, /*key*/, "Saturday1Night", $scope.s1n) //??
提前谢谢,祝你有个美好的夜晚!
Firebase实时数据库API是异步的,这意味着once()
会立即返回。一段时间后,它将在数据可用时调用您的回调。这意味着您的getOneDay
函数也会立即返回未定义的值,因为text
在评估时没有值。
你无法真正创建一个从Realtime Database返回值的函数。您需要使用它们提供的promise或回调来处理其异步API。
Read here to learn more about why Firebase APIs are asynchronous.
您可以尝试async-await:
async function getOneDay(currentUserId, key, query, text){
var datasnapshot = await firebase.database().ref().child('Users').child(currentUserId).child(key).once('value');
if(datasnapshot.$value === null && datasnapshot.id === null) {
/* not working */
text = 'X';
}else{
/* value is "true", person is working */
text = query;
}
return text;
}
$scope.s1n = await getOneDay(/*uid*/, /*key*/, "Saturday1Night", $scope.s1n)