函数返回字符串angularjs firebase

问题描述 投票:0回答:2

我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) //??

提前谢谢,祝你有个美好的夜晚!

javascript angularjs firebase firebase-realtime-database
2个回答
0
投票

Firebase实时数据库API是异步的,这意味着once()会立即返回。一段时间后,它将在数据可用时调用您的回调。这意味着您的getOneDay函数也会立即返回未定义的值,因为text在评估时没有值。

你无法真正创建一个从Realtime Database返回值的函数。您需要使用它们提供的promise或回调来处理其异步API。

Read here to learn more about why Firebase APIs are asynchronous.


0
投票

您可以尝试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)
© www.soinside.com 2019 - 2024. All rights reserved.