2016-11-22 70 views
1

我想要做的事,如:RxJS脫套回調

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