2016-11-22 4 views
1

Я хочу сделать что-то вроде:RxJS де-гнездовые 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')), цепь вылетает, и мой обработчик ошибок не вызывается. Как я могу улучшить это?

ответ

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 
+0

вы правы, это абсолютно рабочий, это было ошибкой с моей стороны. Спасибо за составление минимального рабочего примера, который я должен был сделать! – Henry