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:
           // ...
        }
    })