【发布时间】:2017-01-05 06:14:06
【问题描述】:
我有并且 observable 永远不会发送 onNext 如果它由函数返回,但如果我在返回它的函数中订阅它,则调用 onNext。
class InfoViewModel {
func refreshPushToken() {
PushNotificationService.sharedInstance.pushToken!
.flatMapLatest { (pushToken: String) -> Observable<Result<User>> in
return UserService.registerPushToken(pushToken)
}
.subscribe { (event ) in
print(event)
}
.addDisposableTo(disposeBag)
}
}
struct UserService {
....
static func registerPushToken(_ pushToken: String) -> Observable<Result<User>> {
...
return self.postUser(user: user)
}
static fileprivate func postUser(user: User) -> Observable<Result<User>> {
let rxProvider: RxMoyaProvider<Backend> = RxMoyaProvider<Backend>(endpointClosure: Backend.endpointClosure)
return rxProvider.request(Backend.register(user: user))
.mapObject(type: User.self)
.map({ (user: User) -> Result<User> in
LogService.log(level: .debug, action: "postUser", message: "Posted user with success", parameters: ["user": user.deviceId])
return .success(user)
})
.catchError({ error -> Observable<Result<User>> in
LogService.log(level: .error, action: "postUser", message: "Error posting user", parameters: ["user": user.deviceId, "error": error.localizedDescription])
return Observable.just(.failure(error))
})
}
}
但如果我这样做
rxProvider.request(Backend.register(user: user))
...
.subscribe { (event ) in
print(event)
}
在 UserService 中,我会得到下一个事件。
我尝试在 InfoViewModel 中的 observable 上使用 debug(),有一个订阅,我只是从未收到任何事件。
【问题讨论】:
-
添加了行号,我认为图像可以更好地显示这两个文件。
-
meta.stackoverflow.com/questions/285551/… 我只是想帮助您更快地回答您的问题^^
-
会尽快c/p代码
-
Observables 不提供值,除非您订阅它们。他们就是这样工作的。
-
我在 InfoViewModel 中所做的工作,我了解冷热可观察对象。