Как правильно сохранять и загружать ссылки Firestore, используя asyncStorage - PullRequest
0 голосов
/ 08 июня 2019

Я создаю объект чата с использованием ссылок Firestore, а затем сохраняю этот объект в asyncStorage (включая ссылки, которые я использовал) для загрузки в будущем.

При загрузке объекта из хранилища и попытке доступа к немуссылки, я получаю сообщение об ошибке: chat.messagesRef.orderBy("createdAt", "desc").onSnapshot(onMessagesUpdate);

Объект чата:

{
id: someID,
messagesRef: someFirebaseRefObject
}

Пример справочной функции, которую я хотел бы сохранить в хранилище:

firebase.firestore().collection('users').doc(chatID).collection('chats').doc(currentUser.id)

Мой код для сохранения и загрузки чатов выглядит следующим образом:

export const loadChat = async(chatData, chatID, chatType) => {
  try {
    const chat = await AsyncStorage.getItem(`@chats/${chatID}`)
    if(chat !== null) {
      const chatObj = encycle(JSON.parse(chat))
      console.log('chatObj:', chatObj)
      return chatObj
    } else {
      return syncChat(chatData, chatID, chatType)
    }
  } catch(e) {
    console.log(e)
    return false
  }
}


export const storeChat = async(chatID, chat) => {
  try {
    let chatObj = JSON.stringify(decycle(chat));
    if (chatObj){
      await AsyncStorage.setItem(`@chats/${chatID}`, chatObj)
    }
    return chat
  } catch (e) {
    console.log(e)
    return false
  }
}

syncChat - это функция, которая извлекает данные с помощью недавно созданных ссылок, что хорошо работает.Но возврат chatObj из loadChat приводит к ошибке.

Как сохранить эталонные объекты пожарного хранилища, чтобы я мог загрузить их из хранилища и совершать звонки?

Ошибка:

blob:http://localhost:8081/38c013ea-1bea-4338-87e7-3bdf733837b6:62559 Possible Unhandled Promise Rejection (id: 0):
TypeError: TypeError: chat.messagesRef.orderBy is not a function

This error is located at:
    in App (at CodePush.js:578)
    in CodePushComponent (at renderApplication.js:34)
    in RCTView (at View.js:45)
    in RCTView (at View.js:45)
    in AppContainer (at renderApplication.js:33)
TypeError: TypeError: chat.messagesRef.orderBy is not a function

This error is located at:
    in App (at CodePush.js:578)
    in CodePushComponent (at renderApplication.js:34)
    in RCTView (at View.js:45)
    in RCTView (at View.js:45)
    in AppContainer (at renderApplication.js:33)
    at App._this.snapshotChatMessages (blob:http://localhost:8081/38c013ea-1bea-4338-87e7-3bdf733837b6:86747:26)
    at App.<anonymous> (blob:http://localhost:8081/38c013ea-1bea-4338-87e7-3bdf733837b6:86727:25)
    at callCallback (blob:http://localhost:8081/38c013ea-1bea-4338-87e7-3bdf733837b6:12900:18)
    at commitUpdateEffects (blob:http://localhost:8081/38c013ea-1bea-4338-87e7-3bdf733837b6:12933:13)
    at commitUpdateQueue (blob:http://localhost:8081/38c013ea-1bea-4338-87e7-3bdf733837b6:12921:9)
    at commitLifeCycles (blob:http://localhost:8081/38c013ea-1bea-4338-87e7-3bdf733837b6:17344:17)
    at commitAllLifeCycles (blob:http://localhost:8081/38c013ea-1bea-4338-87e7-3bdf733837b6:18567:13)
    at Object.invokeGuardedCallbackImpl (blob:http://localhost:8081/38c013ea-1bea-4338-87e7-3bdf733837b6:8320:16)
    at invokeGuardedCallback (blob:http://localhost:8081/38c013ea-1bea-4338-87e7-3bdf733837b6:8411:37)
    at commitRoot (blob:http://localhost:8081/38c013ea-1bea-4338-87e7-3bdf733837b6:18743:13)
...