2017-01-11 23 views
0

私は、入力からkeyupイベントをリッスンする観測可能なオブジェクトを持っています。熱い観測可能なエラー処理

keyupでは、サーバーに要求を行い、値がない場合は例外をスローします。

.map(function (oResp) { 
    if (oResp.data.results.length === 0) { 
    throw new Error(self.getTextBundle("insPlantInvalid")); 
    } 
    return oResp.data.results; 
}) 

例外がスローされた後、observableはもうイベントをリッスンしません。

rxjsの例外処理はこのように機能しますか?

答えて

1

はい、これは正しい動作です。例外により、operator send an errorが通知されます。 errorまたはcompleteの両方の信号が放射された最後の信号でなければならず、両方ともcause unsubscriptionでなければなりません。

エラーを再サブスクライブまたは処理するには、retry()retryWhen()catch()またはonErrorResumeNext()などの演算子があります。私はあなたがすでにこれらを知っていると思います。

+0

私は 'catch()'で試しましたが、それ以降もストリームの登録が解除されますか? –

+0

@zero_coding 'catch()'で何を試しましたか? 'catch()'を使うと、ソースの代わりに別のObservableにサブスクライブすることができます。 – martin

+0

私の場合、ユーザーが入力フィールドに無効な値を入力すると、入力フィールドに赤色のマークが付きます。したがって、ユーザーが有効な値を入力すると、赤色が削除されます。 'retryWhen()'で解決する方が良いでしょうか? –

0

.catch()もエラーを処理するために使用できます。

this.http.get('url').map(res => res.json()).catch(() => Observable.of({error: true}) 

これは、エラーやイベント、観察文句を言わない休憩の場合はリターン{error: true}です。しかし、この応答の隣にある地図演算子では、このケースを処理する必要があります。

関連する問題