【问题标题】:Firestore Document get request promise doesn't resolve. How do I solve this problem?Firestore 文档获取请求承诺无法解决。我该如何解决这个问题?
【发布时间】:2019-04-10 19:09:45
【问题描述】:

总结

我在我的项目中使用 react-native-firebase,并且我正在运行纯 react-native(无世博会)。但是,在向 Firestore 上的任何文档发出获取请求时,都不会给出响应。也就是说,在 try-catch 块中,它既不会解决,也不会被拒绝,它会永远持续下去。 (是的,我知道 Promise 并且我正在使用 await/async,所以它不是等待 Promise 完成,事实上,主要的是 Promise 没有得到解决/拒绝)

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

我可以做所有其他 Firebase 工作,例如检查身份验证、设置文档数据、删除、修改编辑等。但这行不通

一点背景故事

这是我在 react-native 和 react-native-firebase 中的第一个项目。过去,我一直致力于 Ionic 和原生 Android (Java)。我从来没有在那里遇到过这个问题。我在互联网上搜索了很多,我得到的一些解决方案主要是针对 Firebase Web SDK,而不是针对 react-native-firebase。 我找到了一个解决方案,关于从身份验证控制台重置用户,但这也从未奏效。我提出了我找到的链接(供参考,因为我的问题与此非常相似,主要区别在于我使用的是 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 查询都应始终有效。

实际输出

获取查询仅在不经常调用时才有效。 (我知道这很奇怪)

【问题讨论】:

  • 你的意思是在第二个例子中使用反引号吗?
  • @Robert Harvey,是的,我必须使用波浪号(反引号),因为我必须在字符串中使用变量

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


【解决方案1】:

您是否尝试过使用常规的 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'))

如果您找到了合适的解决方案,请告诉我,因为这段代码很明显有异味。

【讨论】:

    猜你喜欢
    • 2021-06-29
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2020-10-22
    • 2020-03-25
    相关资源
    最近更新 更多