【问题标题】:Promise doesn't return array of objectPromise 不返回对象数组
【发布时间】:2016-08-31 10:56:16
【问题描述】:

我在 Firebase 中使用 angularJs。 要从 firebase 检索数据,请使用以下代码。

Controller.js

$scope.load_msg=function(){
  $scope.msg=[];
  Chat.load_msg($scope.name,$scope.user.profile.name).then(function(arr){
    $scope.msg=arr;
    console.log($scope.msg);
  },function(error){
    console.log(error);
  });
}

Service.js

load_msg:function(name,frm){
  var deferred = $q.defer();
  var sref=ref.child('/Chats/'+frm);
  var rref=ref.child('Chats/'+name);
  var msgArray=[];
  ref.orderByChild("to").equalTo(name).once('child_added',function(messages){
    msgArray=msgArray.concat(messages.val());
    deferred.resolve(msgArray);
  },function(error){
    deferred.reject(error);
  });
return deferred.promise;
}

msgArray 包含由 on() 查询的所有元素,但回到控制器 arr 仅查询第一个对象。如何通过 promise 发送整个数组msgArray

【问题讨论】:

  • 一个promise只能解决一次。在数组完成之前不要调用resolve
  • 你能告诉我应该在哪里调用resolve吗?我似乎找不到解决方案

标签: javascript angularjs firebase promise


【解决方案1】:

问题出在这里:

load_msg:function(name,frm){
  var msgArray=[]; //You reset the array every time the function is called!!
  ref.orderByChild("to").equalTo(name).once('child_added',function(messages){
    msgArray=msgArray.concat(messages.val());
    deferred.resolve(msgArray);
  });
return deferred.promise;
}

把它改成这样:

ServiceFunction() {
  var msgArray = [];
  return {
    load_msg:function(name,frm){
  ref.orderByChild("to").equalTo(name).once('child_added',function(messages){
      msgArray=msgArray.concat(messages.val());
      //deferred resolve etc...
    });
  }
}

【讨论】:

    【解决方案2】:

    您正在使用.once('child_added',它只会触发一次:用于第一个子项。

    使用on('child_added'once('value'。由于您调用了参数messages,您可能正在寻找后者:

    ref.orderByChild("to").equalTo(name).once('value',function(messages){
      messages.forEach(function(message) {
        msgArray.push(message.val());
      });
      deferred.resolve(msgArray);
    },function(error){
      deferred.reject(error);
    });
    

    【讨论】:

      猜你喜欢
      • 2019-06-30
      • 2019-01-07
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      • 2019-02-16
      相关资源
      最近更新 更多