gpt4 book ai didi

swift - 如何通过物化处理永无止境的链上的错误?

转载 作者:行者123 更新时间:2023-12-03 09:05:28 25 4
gpt4 key购买 nike

想象一下用户想要保存某种列表的以下链:

var saveChain = userTappedSaveListSubject
.doOnNext { list -> Void in // create pdf version
let pdfFactory = ArticleListPDFFactory()
list.pdf = try pdfFactory.buildPDF(list)
try database.save(list)
}
.flatMap { list in
AuthorizedNetworking.shared.request(.createList(try ListRequestModel(list)))
.filter(statusCode: 201)
.map { _ in list }
}
.doOnNext { list in
list.uploaded = true
try database.save(list)
try Printer().print(list)
}
.materialize()
.share()

链中的每个运算符都可能发生错误,这将终止流并且用户将无法重试保存和打印列表(整个链被处理掉)。

最后,通过将 observable 绑定(bind)到 textField,用户应该会看到“成功”或“失败”屏幕:
Observable.of(
saveChain.elements().map { _ in
("List saved!", subtitle: "Saving successfull")
},
saveChain.errors().map { error in
("Error!", subtitle: error.localizedDescription)
})
.merge()

错误应该如何处理?

最佳答案

这是明显的修复:

let saveChain = userTappedSaveListSubject
.flatMap { list in
Observable.just(list)
.do(onNext: { list -> Void in // create pdf version
let pdfFactory = ArticleListPDFFactory()
list.pdf = try pdfFactory.buildPDF(list)
try database.save(list)
})
.flatMap { list in
AuthorizedNetworking.shared.request(.createList(try ListRequestModel(list)))
.filter(statusCode: 201)
.map { _ in list }
}
.do(onNext: { list in
list.uploaded = true
try database.save(list)
try Printer().print(list)
})
.materialize()
}
.share()

但是,由于混合范式,此代码存在许多问题。
  • 你在 Observables 中传递一个可变类。这是有问题的,因为它是一种功能范式,因此系统期望包含的类型是结构/枚举或不可变类。
  • 您依赖副作用来再次加载所述可变类对象是非常奇怪的并且违反了范式。
  • 关于swift - 如何通过物化处理永无止境的链上的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57522455/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com