私はいくつかのRx.Observableチュートリアルの後にAngular 2アプリケーションからオートコンプリートシステムを使用しています。ValueChangesはRx.Observableでエラーが発生するとすぐに機能しなくなります
フィールドに入力すると、valueChangesイベントがAngular 2 FormControlから発生します。
これはJSONエンドポイントに対してHTTPリクエストを作成するObservableに連鎖されています。
エンドポイントが404ステータスを返す瞬間、valueChangesイベントは動作を停止します。
私のサブスクライブ方法でエラーが表示されることがありますが、復旧して続けるのが最善の方法であるかどうかは本当にわかりません。
KeyUpイベントまたはValueChangeイベントの発生がなぜ停止するのか少し混乱しています。
サンプル値の変更 - 観察可能なチェーン
this.userNameControl
.valueChanges
.do(r => {
// As soon as a 404 status is thrown from getGitHuybUser$, all value change (keyup) events stop working
console.log
}
)
.switchMap(userName => {
return this.getGitHubUser$(userName);
})
.catch(err => {
return Observable.of(err)
})
.subscribe(v => {
console.log(v);
},
(err) => {
// As soon ass there is a 404 status, I end up here
console.log(err);
},
() => {
console.log('Complete');
});
getGitHubUser$(username) {
return this.http
.get(`https://api.github.com/users/${username}`)
}
HTMLフォームコントロール
<input type="text" [value]="userName" [formControl]="userNameControl" />
私はキャッチにObservable.empty()とObservable.neverを()を返すみました
.catch(err => {
// Observable.of(err)
// return Observable.empty();
return Observable.never();
})
結果はsubscribe
メソッドは私のcomplete
メソッドと呼ばれていたので、valueChangesはまだ起動しません。
のハングするのに必要な
.switchMap()
でぶら下がっていた私の問題、.catch()
を考え出しました。エラーを除外して何とか再試行するか、または再登録する必要があります。 –