【问题标题】:Double response from subscribe when I expect one当我期待订阅时,双重响应
【发布时间】:2021-07-28 08:28:02
【问题描述】:

我有一个相当奇怪的问题,即当我订阅 latestMessageCollection 时 - 当我在 Firestore 中添加新文档时 - 我得到两个响应。应该有一个。

  ngOnInit() {
    this.getRooms();
    this.chatList.sort(function compare(a, b) {
      const dateA = new Date(a.lastMessage.date);
      const dateB = new Date(b.lastMessage.date);
      return dateB.getTime() - dateA.getTime();
    });
  }

  getRooms() {
    this.communicatorService.getRooms().subscribe((rooms) => {
      this.chatList = [];
      rooms.forEach((room, index, array) => {
        console.log(room.room);
        const latestMessageCollection = this.firestore.collection(`chat/rooms/${room.room}`, ref => ref
          .orderBy('createdAt', 'desc')
          .limit(1)
        )
          .valueChanges({idField: 'id'});
        latestMessageCollection.subscribe((latestMessage) => {
          console.log('CHANGE', index, latestMessage[0]);
          const lastMessage = latestMessage[0];
          if (!this.getChatByRoom(this.chatList, room.room)) {
            this.avatarsToLoad.push({
              room: room.room,
              avatar: room.sender.avatar
            });
            this.chatList.push({
              room: room.room,
              user: {
                id: room.sender.id,
                name: room.sender.name + ' ' + room.sender.lastname,
                avatar: room.sender.avatar,
                description: ''
              },
              lastMessage: {
                user: latestMessage.length !== 0 ? lastMessage.user : 0,
                content: latestMessage.length !== 0 ? lastMessage.message : '',
                date: latestMessage.length !== 0 ? lastMessage.createdAt.toDate() : new Date('0000-00-00 00:00')
              },
              unreadMessagesCount: 0
            });
          }
        });
        if (index === array.length - 1) {
        }
      });
    });
  }

控制台日志:

这里的 console.log 应该只出现一次,而不是两次。

有人可以解释为什么会这样以及如何预防?

【问题讨论】:

    标签: angular firebase google-cloud-firestore angularfire


    【解决方案1】:

    据我了解,这里的问题是:

    1. 您可能遇到了here 提到的缓存问题。
    2. 根据thread,似乎 debounceTime() 可能是一种解决方法。

    否则,您可以检查您是否同时拥有 2 个生活订阅。

    【讨论】:

      猜你喜欢
      • 2021-05-06
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多