Firestore文档获取请求承诺无法解决。我该如何解决这个问题?

时间:2019-04-10 19:09:45

标签: firebase react-native google-cloud-firestore react-native-firebase

摘要

我在项目中使用react-native-firebase,并且正在运行纯react-native(无Expo)。但是,在将请求发送到Firestore上的任何文档时,永远不会给出响应。也就是说,在try-catch块中,它既无法解决,也不会被拒绝,因此它将永远持续下去。 (是的,我了解诺言,并且我正在使用await / async,所以它不是等待诺言完成,实际上,主要是诺言没有得到解决/拒绝)

主要问题是此问题是随机出现的,它不是每次都会失败,而是随机发生。仔细观察,我还观察到这种情况主要发生在我不断执行get请求时,例如,我有一个查询,用于检查文档中的最新版本,现在每当我重新加载应用程序时,都会执行此get查询,并且在2-3次频繁重新加载后,此查询将无法解决。

我可以执行所有其他Firebase的工作,例如检查身份验证,设置文档数据,删除,修改编辑等。但这无法解决

一些背景故事

这是我在react-native和react-native-firebase中的第一个项目。过去,我一直在研究Ionic和本机Android(Java)。我在那里从未遇到过这个问题。我在互联网上进行了大量搜索,获得的一些解决方案主要用于Firebase Web SDK,而不是react-native-firebase。 我找到了一种有关从Authentication控制台重置用户的解决方案,但该解决方案也不起作用。我提出了我找到的链接(作为参考,因为我的问题与此非常相似,并且主要不同之处在于我使用react-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 :(得分:0)

您是否尝试过使用常规promise(then / catch)语法?我个人还注意到在将react-native-firebase库与redux-saga的call一起使用时,存在一些许诺不一致(就像您提到的那样,它根本不起作用)。为了解决我的问题,我只是将所有请求包装在返回新的实际诺言的函数中,该诺言以某种方式起作用。为什么还是一个谜。

示例:

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'))

如果找到合适的解决方案,请让我知道,因为这段代码显然很香。