Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度2观测值-动作时的空响应仍然显示阵列中的数据_Javascript_Angular_Firebase_Ionic2_Angularfire2 - Fatal编程技术网

Javascript 角度2观测值-动作时的空响应仍然显示阵列中的数据

Javascript 角度2观测值-动作时的空响应仍然显示阵列中的数据,javascript,angular,firebase,ionic2,angularfire2,Javascript,Angular,Firebase,Ionic2,Angularfire2,我有一个函数,它从Firebase聚合一些用户数据,以构建一个“朋友请求”视图。页面加载时,将显示正确的请求数。当我点击一个“接受”按钮时,正确的连接请求会被更新,这会发出再次运行此功能的信号,因为用户已经订阅了它。唯一的问题是,一旦所有好友请求都被接受,最后一个剩余的用户将留在列表中,并且不会离开,即使他们已经被接受 下面是我用来获取请求的函数: getConnectionRequests(userId) { return this._af.database .objec

我有一个函数,它从Firebase聚合一些用户数据,以构建一个“朋友请求”视图。页面加载时,将显示正确的请求数。当我点击一个“接受”按钮时,正确的连接请求会被更新,这会发出再次运行此功能的信号,因为用户已经订阅了它。唯一的问题是,一旦所有好友请求都被接受,最后一个剩余的用户将留在列表中,并且不会离开,即使他们已经被接受

下面是我用来获取请求的函数:

getConnectionRequests(userId) {

    return this._af.database
      .object(`/social/user_connection_requests/${userId}`)

      // Switch to the joined observable
      .switchMap((connections) => {

        // Delete the properties that will throw errors when requesting
        // the convo keys
        delete connections['$key'];
        delete connections['$exists'];

        // Get an array of keys from the object returned from Firebase
        let connectionKeys = Object.keys(connections);

        // Iterate through the connection keys and remove
        // any that have already been accepted

        connectionKeys = connectionKeys.filter(connectionKey => {

          if(!connections[connectionKey].accepted) {
            return connectionKey;
          }
        })

        return Observable.combineLatest(
          connectionKeys.map((connectionKey => {

              return this._af.database.object(`/social/users/${connectionKey}`)
            }))
        );
      });
  }
以下是我的Angular 2视图中的相关代码(使用Ionic 2):


我觉得我的可观察性有问题,这就是为什么这个问题发生的原因。也许有人能解释一下吗?提前谢谢

我想你在评论中说对了。如果
connectionKeys
是一个空数组,则调用
可观察。CombineTest
不合适:

导入'rxjs/add/observable/of';
if(connectionKeys.length==0){
([])的可观测收益率;
}
返回connectionKeyObservable.CombineTest(
connectionKey.map(connectionKey=>
此.u af.database.object(`/social/users/${connectionKey}`)
)
);

您是否用
this.requests=requests验证了这一点最终接收并分配一个空数组?实际上,这很奇怪。我正在查看数据库,“accepted”字段将为true,但不管数组中的最后一个元素是什么,它都会留在那里。当map函数没有要迭代的键时,subscribe看起来并没有发出信号。现在,我认为这个答案应该是正确的。我想我也应该喝完这杯咖啡。哦,我的天哪,这就成功了!疯狂的是,我实际上在尝试类似的东西,但我没有添加那个重要的声明哈哈:P,但现在它就像一个符咒!太谢谢你了,我的头撞到精神墙已经好几个小时了
ionViewDidLoad() {

    // Get current user (via local storage) and get their pending requests
    this.storage.get('user').then(user => {
      this._connections.getConnectionRequests(user.id).subscribe(requests => {

        this.requests = requests;
      })

    })
  }