RxSwift:如何在链可观察上抛出错误

时间:2017-05-15 08:58:02

标签: swift3 throw rx-swift

任何人都可以帮我这个吗?我有这个小代码:

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必须按顺序执行,并且这些错误具有不同的消息

1 个答案:

答案 0 :(得分:2)

您应该在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:
           // ...
        }
    })
相关问题