javascript - Angular 2 Observables - 对 Action 的空响应仍然显示数组中的数据

标签 javascript angular firebase ionic2 angularfire2

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

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

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 View 中的相关代码(使用 Ionic 2):

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;
      })

    })
  }

我觉得我的 observable 做错了什么,这就是为什么会出现这个问题。任何人都可以对此有所了解吗?提前致谢!

最佳答案

我认为您在评论中指出了这一点。如果 connectionKeys 是一个空数组,调用 Observable.combineLatest 是不合适的:

import 'rxjs/add/observable/of';

if (connectionKeys.length === 0) {
  return Observable.of([]);
}
return connectionKeyObservable.combineLatest(
  connectionKeys.map(connectionKey =>
    this._af.database.object(`/social/users/${connectionKey}`)
  )
);

关于javascript - Angular 2 Observables - 对 Action 的空响应仍然显示数组中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41686899/

相关文章:

angular - 具有条件 <optgroup> 的动态 <select><option> 作为 ng-container 不工作

css - NG-ZORRO nz卡体内对准

ios - swift3 append 函数在 firebase observeSingleEvent 内部不起作用

firebase - Firestore上的空uid尝试使用Flutter和Firebase保存数据

ios - 如何将图像上传到 Firebase Storage 并获取 downloadURL 的链接?

javascript - 如何使用 css 和 javascript 创建看起来自然的线条?

javascript - 如何使用 Zod 的 isEmail?

css - 从 css 到 scss 的 Angular-cli

javascript - Vue.js 路由器不工作

javascript - 如何动态创建多个Jquery颜色选择器(eyecon)?