RxJS去嵌套回调

时间:2016-11-22 03:12:56

标签: javascript node.js ecmascript-6 rxjs rxjs5

我想做类似的事情:

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')),链就会崩溃而我的错误处理程序不会被调用。我怎样才能改善这个?

1 个答案:

答案 0 :(得分:1)

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

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