我在项目中使用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查询应始终运行。
获取查询仅在不经常调用时才起作用。 (我知道这很奇怪)
答案 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'))
如果找到合适的解决方案,请让我知道,因为这段代码显然很香。