Firestore Document получить запрос обещание не разрешается. Как мне решить эту проблему? - PullRequest
1 голос
/ 10 апреля 2019

Резюме

В моем проекте я использую реактивную базу-огонь, и я использую чисто реактивную версию (No Expo). Однако, когда вы помещаете запрос get в любой документ в Firestore, он никогда не дает ответа. То есть в блоке try-catch он не разрешается и не отклоняется, он продолжается вечно. (И да, я знаю об обещаниях, и я использую await / async, поэтому речь идет не о том, чтобы ждать выполнения обещания, на самом деле главное, чтобы обещания не выполнялись / не отклонялись)

Основная проблема заключается в том, что эта проблема возникает случайным образом, она не похожа на ошибку каждый раз, она происходит случайным образом. При внимательном наблюдении я также заметил, что это происходит в основном, когда я постоянно выполняю запросы get, например, у меня есть запрос, который проверяет наличие последней версии в документе, теперь, когда я перезагружаю приложение, выполняется этот запрос get, и при 2-3 частых перезагрузках этот запрос никогда не разрешается.

Я могу делать все другие вещи Firebase, такие как проверка подлинности, настройка данных документов, удаление, изменение редактирования и т. Д. Но это не сработает

немного истории фона

Это мой первый проект на реактивно-нативной и реактивно-нативной базе. В прошлом я работал над Ionic и нативным Android (Java). Я никогда не сталкивался с этой проблемой там. Я много искал в интернете, и несколько решений, которые я получил, были в основном для Firebase Web SDK, а не для response-native-firebase. Я нашел одно решение, касающееся сброса пользователя с консоли аутентификации, но оно тоже не сработало. Я выдвигаю ссылку, которую я нашел (для справки, так как моя проблема очень похожа на эту, и в основном отличается тем, что я использую реактив-native-firebase, а не Firebase Web SDK).

https://github.com/firebase/firebase-js-sdk/issues/533

Примеры кода

Получить запросы (несколько примеров кода, которые я использую)

let updateData = await firebase.firestore().doc('Updates And Errors/Updates').get();

var expensesDoc = await firebase.firestore().doc(`NewExpenses/${dateToday}`).get()

Ожидаемый результат

Все запросы Get должны работать постоянно.

Фактический объем производства

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

1 Ответ

0 голосов
/ 10 июля 2019

Вы пытались использовать обычный синтаксис обещания (затем / улов)? Я лично заметил некоторые несоответствия в обещаниях при использовании библиотекиact-native-firebase с call redux-saga (она просто не работала, как вы упомянули). Чтобы решить мою проблему, я просто обернул все запросы в функции, которые возвращают новое, фактическое обещание, которое каким-то образом сработало. Хотя все еще загадка, почему.

Пример:

function get (query) {
  return new Promise((resolve, reject) => {
    query.get()
      .then(data => resolve(data))
      .catch(err => reject(err))
  })
}

// Later use:
await get(firebase.firestore().doc('yourDoc'))

Если вы когда-нибудь найдете правильное решение, пожалуйста, дайте мне знать, так как этот код явно пахнет.

...