2017-03-09 9 views
1

observableを通して一連のコンテンツをストリーミングしようとしていますが、最初のエラーの後に停止します。同じように動作するので、これをアイテムの配列と考えるのは簡単です。 observable.emptyを返しrxjsは、エラーの直後にエラーの直後にobservableを完了します。

  1. 私は
  2. はキャッチを(実行要求の約束としてURLを呼び出すURL
  3. に各項目をマッピングする項目
  4. の配列から、観察を作成しています) ()RxJS 5による誤り

の場合には:

rx.Observable.from(array) 
    .map(self.createUrl) 
    .flatMap(x => { 
      var options = { 
      uri: url, 
      headers: { 
       "Content-Type": "application/json" 
      }; 
      return rx.Observable.fromPromise(request-promise(options)); 
     }) 
    .catch(() => { 
    return rx.Observable.empty();}) 
    .subscribe(x => console.log('success:', x), 
      e => console.log('error'), 
      () => console.log('complete')); 

このシーケンスを実行すると、最初のエラーが発生した後にコードが停止します。私は#4の空の観測可能性が観察可能なものを終了していると思われますが、私はなぜそれがわかりません。

私の望むプロセスは、配列に含まれるすべてのアイテムがエラーに関係なく処理されることです。最終的にすべての正常なアイテムを処理し、各エラーの後に再開します。

+2

動作は理にかなっています。エラーが発生した場合、元の観測値は完了し、空の観測値に置き換えられます。私はあなたが['onErrorResumeNext()'](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/onerrorresumenext.md)を探していたと思います。例えば、flatMapと組み合わせて使用​​する – slezica

+0

私はその考えを.from(Array)行でラップしてみた。 rx.Observable.onErrorResumeNext(rx.Observable.from(array))、 何もしなかった。 リクエストにflatMapをどのように書き込むかわかりませんか?それとも、私は何かを間違えていますか? –

+0

申し訳ありません - pebkac。あなたが言っているのはフラット・マップです。ありがとうございました。私は修正でまだ返信することができないように見えます。 –

答えて

3

あなただけflatMapcatch()を配置する必要があります:

rx.Observable.from(array) 
    .map(self.createUrl) 
    .flatMap(x => { 
    var options = { 
     uri: url, 
     headers: { 
     "Content-Type": "application/json" 
     } 
    }; 
    return rx.Observable 
     .fromPromise(request-promise(options)) 
     .catch(() => rx.Observable.empty()); 
    }) 
    .subscribe(x => console.log('success:', x), 
      e => console.log('error'), 
      () => console.log('complete')); 

さて、内部観察可能で、それはすぐにキャッチされるだろうと.flatMap()を介してメインストリームに伝播しないエラーを発するとき。

関連する問題