有啥方法可以获取 firebase 请求的状态吗?

Posted

技术标签:

【中文标题】有啥方法可以获取 firebase 请求的状态吗?【英文标题】:Is there any way to get the status of a firebase request?有什么方法可以获取 firebase 请求的状态吗? 【发布时间】:2017-03-23 15:18:48 【问题描述】:

似乎常见的 Firebase 用例之一是聊天应用,所以我开始在这种情况下使用它。我真的很喜欢进行身份验证并启动和运行基本聊天是多么容易。但是,当我开始尝试确定请求的状态并实施超时时,我被抛出了一个循环。我专门在 Swift 中使用 Firebase。

我尝试实现的第一个状态是“发送”状态,但由于无法知道请求的状态,我最终将它们自动生成的 id 存储在一个数组中,并在完整的处理程序中删除它们。这并不可怕,但我可以想到一些边缘情况,例如有人在同步之前关闭了应用程序,所以我丢失了队列中的消息数组,但可能有一条消息没有同步。然后他们重新启动应用程序,但由于 firebase 尝试发送消息,它的状态不正确。

Firebase 数据库对象(“行”/“文档”/“节点”)中是否有任何标志可以告诉您数据实际上在服务器上。一个完整的回调很好,但它会在应用程序崩溃/关闭请求中消失,这仍然意味着我必须编写自己的逻辑来知道节点是否同步,因为观察回调在节点打开之前触发服务器。有node.isSynced之类的吗?

我要实现的第二个状态是失败状态。假设用户发送了一条消息,但一分钟后由于连接不良而没有发送。我认为发送状态只是坐在那里是一种非常糟糕的体验,所以我希望“发送失败”。

我希望使用 Firebase 实现聊天功能的人能够重视这两个问题。我彻底阅读了文档,但我是否遗漏了一些 Firebase 范式,让这些东西不会让人觉得我在反对 Firebase 宗教?

【问题讨论】:

我的请求状态是什么意思?此外,firebase 是异步的,因此用户界面永远不会被锁定。您可以很容易地在完成闭包中处理 Firebase 错误。 @Jay - 也许我可以进一步澄清情况/问一个更好的问题。让我们从这里开始 - Firebase 数据库对象(“行”/“文档”/“节点”)中是否有任何标志可以告诉您数据实际上在服务器上。一个完整的回调很好,但它会在应用程序崩溃/关闭请求中消失,这仍然意味着我必须编写自己的逻辑来知道节点是否同步,因为观察回调在节点打开之前触发服务器。有没有像node.isSynced 这样的东西? 这是很好的附加信息 - 在这种情况下,最好更新实际的 question,因为它可以很好地阐明问题。 【参考方案1】:

为了检测一个值是否已写入数据库,您可以使用完成侦听器。在此处查看 Jay 的示例:Firebase completion listeners in swift

您绝对可以对某些操作进行超时。但是更常见的显示连接状态的方法是use Firebase's built-in .info/connected path to detect the connection state。

如果您在执行上述任一操作时遇到问题,请分享minimal code that reproduces where you're stuck,我们会看看。

【讨论】:

谢谢弗兰克!如果应用程序在请求中崩溃,侦听器如何工作? Firebase 不会尝试继续请求,但我会失去回调? 您还提到“您绝对可以对某些操作进行超时”,但我在文档中没有看到。你介意分享一下吗? @Tony 闭包中的代码运行数据成功写入 Firebase。该过程是(松散的):应用程序写入数据->成功写入服务器->确定发送回应用程序->关闭运行中的代码。如您所见,即使闭包中的代码炸毁,也不会发生直到 数据写入之后。添加侦听器(观察者)监视 Firebase 中的更改,并且与将数据推送到 Firebase 没有直接关系,除非在注释上有侦听器,您的应用将收到该写入的通知,这与中的代码无关完成关闭运行。 @Tony 我会对一个用例感兴趣 - 或者可能是应用程序在请求中崩溃的场景示例。什么样的要求?你能用更具体的数据更新你的问题吗? @Jay 我不是指与 Firebase 相关的崩溃。假设您的连接速度很慢,因此需要几秒钟才能写入。在那几秒钟内,您的应用程序由于其他原因而崩溃。 Firebase 将能够在应用程序重新启动时恢复,但您的完成处理程序不会附带它(请注意,这可能只有在启用持久性时才适用,仍在学习中)。因此,当您的应用程序重新启动时,您将获得 childAdded 观察,因为这只是本地读取(据我了解),但是在写入节点时,您不会收到通知。至少看起来是这样。

以上是关于有啥方法可以获取 firebase 请求的状态吗?的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以获取有关 QNetworkAccessManager 队列的信息吗?

有啥方法可以为 Windows 临时目录执行 WER“请求附加文件”吗?

可以根据身份验证状态自定义Firebase托管行为(例如,重定向)吗?

有啥方法可以在上传之前获取视频时长吗?

有啥方法可以获取 iOS 上所有应用的通知吗?

有啥方法可以在nodejs中获取用户请求的内部IP地址