Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase Firestore文档获取请求承诺不';我无法解决。我如何解决这个问题? 总结_Firebase_React Native_Google Cloud Firestore_React Native Firebase - Fatal编程技术网

Firebase Firestore文档获取请求承诺不';我无法解决。我如何解决这个问题? 总结

Firebase Firestore文档获取请求承诺不';我无法解决。我如何解决这个问题? 总结,firebase,react-native,google-cloud-firestore,react-native-firebase,Firebase,React Native,Google Cloud Firestore,React Native Firebase,我在我的项目中使用react-native firebase,我运行的是纯react-native(无Expo)。然而,对Firestore上的任何文档发出get请求时,都不会给出响应。也就是说,在一个try-catch块中,它既不会解决问题,也不会被拒绝,它将永远持续下去。 (是的,我知道承诺,我正在使用wait/async,所以这不是等待承诺完成,事实上,主要的是承诺没有得到解决/拒绝) 主要的问题是这个问题是随机出现的,不是每次都失败,而是随机出现的。通过仔细观察,我还发现这种情况主要发生

我在我的项目中使用react-native firebase,我运行的是纯react-native(无Expo)。然而,对Firestore上的任何文档发出get请求时,都不会给出响应。也就是说,在一个try-catch块中,它既不会解决问题,也不会被拒绝,它将永远持续下去。 (是的,我知道承诺,我正在使用wait/async,所以这不是等待承诺完成,事实上,主要的是承诺没有得到解决/拒绝)

主要的问题是这个问题是随机出现的,不是每次都失败,而是随机出现的。通过仔细观察,我还发现这种情况主要发生在我不断执行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)

代码示例 获取查询(我使用的代码示例很少)

预期产量 所有Get查询应始终运行

实际产量
Get查询仅在不经常调用时有效。(我知道这很奇怪)

你试过使用常规的promise(then/catch)语法吗?我个人注意到,在将react原生firebase库与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'))

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

您是想在第二个示例中使用backticks吗?@Robert Harvey,是的,我必须使用tilde(backticks),因为我必须在字符串中使用变量
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'))