RxSwift:如何在可观察链上抛出错误
RxSwift: how to throw error on a chain observable
有人可以帮我解决这个问题吗?我有这个小代码:
getUserDetailsApi().flatMap(){users in
return getScoreApi(users[0])
}.subscribe(
onCompleted: {
print("Done")
},
onError: {
// which of the two APIs get an error?
})
我在这里调用了两个 API,在 getUserDetailsApi 中我想在无法获取用户详细信息或出现问题时调用错误并跳过 getScoreApi。同样在 getScoreApi 上,如果它未能获得用户的分数,它将抛出一个不同的错误。
有什么方法可以在 flatMap() 上抛出上述错误?请注意,这两个 observable 必须按顺序执行,并且这些错误具有不同的消息
您应该在 getUserDetailsApi()
和 getScoreApi()
中抛出错误。
示例:
func getUserDetailsApi() -> Observable<[User]> {
return Observable.create { observer in
// Your api call
// ...
// Probably you get the users array or an error.
if (error) {
observer.onError(YourError.UserDetailsError) // <- Your error
} else {
observer.onNext(users)
observer.onCompleted()
}
return Disposables.create {
// your dispose
}
}
}
getScoreApi()
也是如此。然后,如果其中之一失败,flatMap
将失败。
getUserDetailsApi().flatMap(){users in
return getScoreApi(users[0])
}.subscribe(
onCompleted: {
print("Done")
},
onError: {
switch error{
case .userDetailsError:
// ...
case .otherError:
// ...
}
})
有人可以帮我解决这个问题吗?我有这个小代码:
getUserDetailsApi().flatMap(){users in
return getScoreApi(users[0])
}.subscribe(
onCompleted: {
print("Done")
},
onError: {
// which of the two APIs get an error?
})
我在这里调用了两个 API,在 getUserDetailsApi 中我想在无法获取用户详细信息或出现问题时调用错误并跳过 getScoreApi。同样在 getScoreApi 上,如果它未能获得用户的分数,它将抛出一个不同的错误。
有什么方法可以在 flatMap() 上抛出上述错误?请注意,这两个 observable 必须按顺序执行,并且这些错误具有不同的消息
您应该在 getUserDetailsApi()
和 getScoreApi()
中抛出错误。
示例:
func getUserDetailsApi() -> Observable<[User]> {
return Observable.create { observer in
// Your api call
// ...
// Probably you get the users array or an error.
if (error) {
observer.onError(YourError.UserDetailsError) // <- Your error
} else {
observer.onNext(users)
observer.onCompleted()
}
return Disposables.create {
// your dispose
}
}
}
getScoreApi()
也是如此。然后,如果其中之一失败,flatMap
将失败。
getUserDetailsApi().flatMap(){users in
return getScoreApi(users[0])
}.subscribe(
onCompleted: {
print("Done")
},
onError: {
switch error{
case .userDetailsError:
// ...
case .otherError:
// ...
}
})