我正在努力学习RxJs。我有这个工作代码,但在一个AJAX错误后,一切都停止工作。
(function($, _) {
var alertBox = $('.alert-box');
alertBox.hide();
var fetchRepoButton = $('.fetch-repo');
var organization = $('#organization');
var repositories = $('.repositories');
var fetchRepoClickStream = Rx.Observable.fromEvent(fetchRepoButton, 'click');
var requestStream = fetchRepoClickStream.map(function() {
var theOrg = organization.val();
return '/api/orgs/' + theOrg;
});
var responseStream = requestStream.flatMap(function (requestUrl) {
return Rx.Observable.fromPromise($.getJSON(requestUrl)).catch(function() {
alertBox.fadeIn('fast').delay(500).fadeOut('slow');
return Rx.Observable.Empty();
});
});
var renderRepositories = function(repos) {
// render DOM
}
responseStream.subscribe(function (repos) {
renderRepositories(repos);
});
})($, _);
如何从AJAX错误中恢复?
答案 0 :(得分:1)
这可能是因为当您从Rx.Observable.Empty();
返回flatMap
时,实际上是在终止流。您可以返回错误并将其处理到下游,而不是结束流。
但最后,你的问题的答案将取决于对你有意义的事情(你可以用指数增加的延迟重试多次,你可以中止并继续其他事情等等)。
一般来说,有各种运营商帮助进行错误管理。对于使用Rxjs进行更深入的错误管理,这绝对是一个很好的起点:https://xgrommx.github.io/rx-book/content/getting_started_with_rxjs/creating_and_querying_observable_sequences/error_handling.html
有趣的运营商包括:
有关该主题的有趣链接:
repeatWhen
和retryWhen
)