RxJS 去嵌套回调

RxJS de-nesting callbacks

我想做这样的事情:

Rx.Observable.of(userToken)
    .flatMap(verifyToken)
    .flatMap(getUserInformation)
    .flatMap(createUser)
    .flatMap(signNewToken)
    .subcribe({
        next: result => useResult(result),
        error: error => handleError(error)
    })

我要避免的是回调混乱。在我的代码中,像 verifyToken 这样的函数是 Observables,我想将它们链接起来。这种模式是否在正确的轨道上?因为现在一旦其中一个在内部执行 observer.error(new Error('problem')),链就会崩溃并且我的错误处理程序不会被调用。我该如何改进?

我认为错误确实会传播到您的订阅。这应该模拟您的情况:

const Rx = require('rxjs/Rx');
const Observable = Rx.Observable;

let userToken = Observable.of(42);
let verifyToken = Observable.range(1,3);
let getUserInformation = Observable.of('whatever');
let createUser = Observable.create(observer => {
    observer.error(new Error('problem'));
});

Observable.of(userToken)
    .flatMap(val => verifyToken)
    .flatMap(val => getUserInformation)
    .flatMap(val => createUser)
    .subscribe({
        next: result => console.log("Next:", result),
        error: error => console.log("Error subscriber:", error.message)
    });

控制台中的输出符合预期:

Error subscriber: problem