【发布时间】:2020-10-12 11:28:18
【问题描述】:
我正在尝试将我的firebase 项目转换为与rx swift 一起使用,但.do(onNext:{}) 被丢弃,而onCompleted 触发器在subscription 中。
我做了firebase代码的observable函数:
func fetchFireBaseData() -> Observable<[Recipe]> {
return Observable.create({ [weak self] observer -> Disposable in
guard let self = self else { return Disposables.create() }
self.databaseRef.child(self.recipeType.description).observeSingleEvent(of: .value, with: { snapshot in
guard let data = snapshot.children.allObjects as? [DataSnapshot] else { return }
for item in data {
guard let thisItem = item.value as? NSDictionary else { return }
let tempRecipe = Recipe()
tempRecipe.fbKey = item.key
tempRecipe.recipeImageObject = (thisItem["recipeImageFirebase"] as? String) ?? ""
tempRecipe.recipeHeaderObject = (thisItem["recipeHeaderFirebase"] as? String) ?? ""
tempRecipe.recipeTextObject = (thisItem["recipeIngredientsTextFirebase"] as? String) ?? ""
self.recipeArray.append(tempRecipe)
}
observer.onNext(self.recipeArray)
})
observer.onCompleted()
return Disposables.create()
})
从调用函数的部分:
func reloadContent() -> Observable<[Recipe]> {
guard let fbDataHandler = fbDataHandler else { return Observable.just([]) }
return fbDataHandler.fetchFireBaseData().do(onNext: { [weak self] value in
print("WHY ISNT THIS BEING CALLED?")
self?.content.accept(value.compactMap { RecipesCollectionViewCellViewModel(recipes: $0) })
})
.do(onNext: 被忽略了,我不明白为什么。完成工作:
viewModel?.reloadContent().subscribe(onCompleted: {
print("THIS IS CALLED")
}).disposed(by: disposeBag)
知道为什么它不起作用吗?我在这里读到:https://github.com/ReactiveX/RxSwift/issues/1212那个
a.do(onNext: {
print($0) // not called ????
}) <-- result is observable sequence that is discarded
但我不确定这意味着什么或如何解决它。
编辑 好的,所以这可以通过完成处理程序来解决,但是 rx 的整个想法是在没有完成处理程序的情况下做这样的事情吗?
【问题讨论】:
标签: ios swift firebase observable rx-swift