Вызов метода OnNext () из Observable внутри его производной цепочки
У меня есть такой код:
function getTokenFromStorage(cb) {
// Get token from storage
var token = getToken();
// Feed it to callback function
cb(token);
}
var subject = new Rx.BehaviorSubject(42);
var token = subject
.flatMap(function() {
return Rx.Observable.fromCallback(getTokenFromStorage)();
})
.flatMap(function(token) {
// If the token has expired, we throw it to retry handler and
// hope that it will be renewed somehow
if (isExpired(token)) {
throw 'Token has expired.';
}
return Rx.Observable.just(token);
})
.retryWhen(function(errors) {
// Get a new token and store it to the storage
renewToken();
// Restart whole chain <= QUESTION HERE
subject.onNext(42);
// Delay some time for updating item in storage
return errors.delay(1000);
})
token
.subscribe(function(r) {
// Use token to do some authorized tasks
})
И мой вопрос:
Является ли плохой практикой вызывать метод OnNext () Observable внутри собственной производной цепочки? Это запах побочного эффекта? И если так, как я могу улучшить этот код?
Заранее спасибо.
1 ответ
Если я правильно понимаю ваш пример, вы можете использовать catch для обработки ошибки. Я, наверное, неправильно понимаю ваши намерения, но зачем вообще выкидывать ошибку? Разве вы не можете просто вызвать renewToken() по истечении срока действия токена и вернуть результат этого?