programing

Firestore가 'onSnapshot() requires between 인수'를 슬로우합니다.

prostudy 2022. 6. 27. 20:57
반응형

Firestore가 'onSnapshot() requires between 인수'를 슬로우합니다.

현재 사용자가 읽지 않은 메시지를 모두 방화벽에서 가져오려고 합니다.문제는 내 것이onSnapshot()는 다음 오류를 반환하지만 첫 번째 로드 시 필요한 값을 반환합니다.새 문서가 추가되면onSnapshot(이 에러가 발생한 후 )는 다시 기동하지 않습니다.

Firebase Error:Query.onSnapshot() 함수에는 1~4개의 인수가 필요하지만 0개의 인수로 호출되었습니다.

현재 사용자가 읽지 않은 모든 메시지를 수신하는 도우미 기능입니다.

async getUnseenMessagesCount() {
    const collectionRef = (await firestore()).collection(this.collectionPath) //chats/${user_id+second_identifier/messages}
    let allMessagesCount = 0
    let currentUserReadMessagesCount = 0
    try {
      collectionRef.onSnapshot().then(snapshot => {
        allMessagesCount = snapshot.docs.length
      })
      collectionRef
        .where('seenBy', '==', '') // compare against empty string because seenBy is userId.
        .onSnapshot()
        .then(snapshot => {
          currentUserReadMessagesCount = snapshot.docs.length
        })
    } catch (error) {
      console.log(error)
    }

    console.log(allMessagesCount)
    console.log(currentUserReadMessagesCount)
    console.log(allMessagesCount - currentUserReadMessagesCount)
  }

사용자가 참여하는 모든 채팅에서 읽지 않은 모든 메시지 수를 가져오려면 인증 상태 변경 시 활성화되는 vuex 액션 내에서 다음을 수행합니다.

new UserChatsDB(newUser.id).readAll().then(snapshot => { //users/id/chats/{chat_id: user_id+second_identifier}
        if (snapshot.length > 0) {
          snapshot.forEach(element => {
            console.log(element)
            const count = new MessagesDB(
              element.chat_id
            ).getUnseenMessagesCount()
            console.log(count) //Returns pending Promise
          })
        }
      })

위의 에러의 원인은 무엇입니까?더 나은 방법이 있을까요?데이터베이스 구조가 필요한지 알려주세요.아무쪼록 잘 부탁드립니다!

파이어베이스의 문서에 따르면onSnapshot()다음과 같이 기능합니다.

async getUnseenMessagesCount() {
    const collectionRef = (await firestore()).collection(this.collectionPath) //chats/${user_id+second_identifier/messages}
    let allMessagesCount = 0
    let currentUserReadMessagesCount = 0
    try {
      collectionRef.onSnapshot(snapshot => {
        allMessagesCount = snapshot.docs.length
      })
      collectionRef
        .where('seenBy', '==', '') // compare against empty string because seenBy is userId.
        .onSnapshot(snapshot => {
          currentUserReadMessagesCount = snapshot.docs.length
        })
    } catch (error) {
      console.log(error)
    }

    console.log(allMessagesCount)
    console.log(currentUserReadMessagesCount)
    console.log(allMessagesCount - currentUserReadMessagesCount)
  }

그래서 당신은 당신의 옷을 벗어야 합니다.then().

언급URL : https://stackoverflow.com/questions/57903018/firestore-throws-onsnapshot-requires-between-1-and-4-arguments

반응형