私は観察可能なシーケンスをどのように消費するか、そしてエラーから回復する方法を理解しようとしています。rxjsのエラーから回復するには?
私の例は少し工夫されていますが、実際の実装はここではあまりにも複雑すぎます。とにかく、ユーザーがUIをクリックしたときに値を返すsomeObservable
があります。これにより、API(GET/POST/etc)へのリクエストがトリガーされます。問題は、APIがエラーを返す場合、それ以降はpostData
は呼び出されないということです。
ここでは、問題を示す例を示します。私は、実行するためにRx.Observable.throw
の代わりにRx.Observable.of
を使用できることを発見しました。しかし、それはsubscribe
関数に値を出します。そして、私の実際のアプリケーションでは、postData
は、アプリケーションの複数の部分で再利用されるサービスであり、throw
の代わりにof
を使用したいと確信できません。
私の質問は、どのようにこれらのようなものを普通に扱うのですか?
let someObservable = Rx.Observable.timer(1, 1000);
someObservable
.switchMap(data => {
return postData(data);
})
.catch(error => {
console.log("POST failed");
})
.subscribe(val => console.log("Success: " + val));
function postData(data) {
console.log("Will post " + data);
if (data !== 2) {
return Rx.Observable.of(true);
}
else {
return Rx.Observable.throw(new Error("400 Bad Request or something"));
}
}
http://jsbin.com/naroyeyive/3/edit?js,console
即座にキャッチ: 'return postData(data).catch(...)'変更されたビン:http://jsbin.com/rujakoguro/3/edit?js,console –
@arturgrzesiakさて、これはうまくいくようです!答えを書いて簡単に説明できると思いますか?私はコードに似ているのではなく、そこにキャッチする必要がありますか? – Joel