Вызов метода 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() по истечении срока действия токена и вернуть результат этого?

Другие вопросы по тегам