首页 > 解决方案 > Firebase StorageReference.listAll() 完成处理程序在错误情况下意外触发两次

问题描述

我正在编写一个 iOS 应用程序,我想列出 Firebase 存储文件夹中的所有文件。如果我理解正确,这样做的方法是使用 StorageReference.listAll() 函数,该函数将完成处理程序作为其参数。问题是在错误情况下——例如如果用户离线——这个处理程序会触发两次:第一次有错误,第二次没有。这是我的代码,为了这个问题的目的而简化:

let storageReference = Storage.storage().reference().child(userID)
storageReference.listAll { (result, error) in

  print("handler fires")

  if let error = error {
    print("error")
  } else {
    print("no error")
  }
}

在常规情况下,这会输出“处理程序触发”、“无错误”,这是人们所期望的。但是,如果用户离线,它会输出“handler fires”、“error”、“handler fires”、“no error”,这看起来很奇怪。有谁知道为什么处理程序在错误情况下触发两次,以及为什么第二次触发没有报告错误?

这是完整的错误日志:

处理程序开火

错误描述:Error Domain=FIRStorageErrorDomain Code=-13000 “发生未知错误,请检查服务器响应。” UserInfo={_kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=50, NSErrorFailingURLStringKey=https://firebasestorage.googleapis.com/v0/b/xxx.appspot.com/o?prefix=xxx/&delimiter=/, NSUnderlyingError=0x282dcdc80 {错误域= kCFErrorDomainCFNetwork 代码=-1009 "(null)" UserInfo={_kCFStreamErrorCodeKey=50, _kCFStreamErrorDomainKey=1}}, NSErrorFailingURLKey=https://firebasestorage.googleapis.com/v0/b/xxx.appspot.com/o?prefix=xxx /&delimiter=/,_NSURLErrorRelatedURLSessionTaskErrorKey=("LocalDataTask <1487E789-1446-42FF-9F5F-EEF8AD4370E1>.<4>"), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <1487E789-1446-42FF-9F5F-EEF8AD4370E1>.<4>,

处理程序开火

没有错误

标签: iosswiftfirebaseerror-handlingfirebase-storage

解决方案


推荐阅读