AJAX ストリームの読み込みインジケータを表示する「Rx」の方法に頭を悩ませています。
$scope.$createObservableFunction("load")
.take(1)
.do(function(){
$scope.loading = true;
})
.flatMap(contentService.AJAX_THINGY_AS_OBSERVABLE)
.delay(300)
.subscribe(function(content){
console.log("content",content);
},function(error){
$scope.error = error
},function() {
$scope.loading = false;
});
私が理解している限り、.do()
副作用に使用する必要がありますloading
が、設定はそうであると思いますが、正しいやり方ではないように感じます。
これを行う方法のよりクリーンな/より良い/適切な例を誰かが提供できますか?
ありがとう!
更新 1
これを 2 つのストリームに分割することにしました。requestSource
とresponseSource
。
var loadRequestSource = $scope.$createObservableFunction("load")
.share();
var loadResponseSource = loadRequestSource
.flatMap(contentService.AJAX_THINGY_AS_OBSERVABLE)
.throttle(1000)
.share();
次に、2 つの個別のサブスクライバーを用意します。
loadRequestSource.subscribe(function () {
$scope.loading = true;
});
loadResponseSource.subscribe(function (response) {
/* enter logic */
$scope.loading = false;
$scope.$digest();
}, function (err) {
$scope.error = err;
$scope.loading = false;
$scope.$digest();
});
サブスクライブの役割を正確に保つため、このアプローチが気に入っています。loading
応答サブスクライバーは、 への設定を気にする必要はありませんtrue
。に設定することだけを気にしfalse
ます。