Как отмечалось в комментариях, вы используете анти-шаблон конструктора Promise, чтобы избежать этого, вы должны напрямую связать свой код с resultPromise
.
Более того, вы можете упростить управление вызовом requestToken
возвращая его:
Обычно значение, возвращаемое обработчиком .then, немедленно передается следующему обработчику.Но есть исключение.
Если возвращаемое значение является обещанием, то дальнейшее выполнение приостанавливается до тех пор, пока оно не установится.После этого результат этого обещания передается следующему обработчику .then.
(цитируется по этой статье )
Таким образом, вы получитечто-то вроде этого:
const finalPromise: Promise<string> = resultPromise.then(token => {
if (Pending) {
return token;
} else if (!this.tokenIsValid(token)) {
return requestToken();
} else {
return token;
}
);
// Later
finalPromise.then(stringToken => console.log(stringToken));
оператор if-else тоже можно упростить, но, поскольку я не знал типа Pending
, я этого не делал.
К вашему сведению: это был не ваш случай, но если вам действительно нужно когда-нибудь иметь несколько типов возврата, НЕ ИСПОЛЬЗУЙТЕ any
, а вместо этого используйте тип объединения :
myAwesomeFunctionReturnStringOrNumber(): string | number {
...
};
myOtherFunctionTakeStringOrNumber(param: string | number) {
...
};