У меня есть функция, которая приводит к большому количеству ошибок, поэтому мне приходится вызывать ее много раз, прежде чем она, наконец, даст правильный результат. Он возвращает обещание, поэтому я создал вокруг него оболочку, которая рекурсивно продолжает вызывать его при отклонении.
Я хочу вернуть новое обещание, созданное с помощью Bluebird, но который должен быть отклонен по истечении установленного времени ожидания. И он должен постоянно вызывать эту функцию. Но перед каждым повторением я хочу проверить, не было ли оно автоматически отклонено из-за тайм-аута.
Bluebird имеет isRejected()
, но, похоже, я не могу использовать его изнутри тело обещания:
var promise = new Promise(function(resolve, reject){
var self = this;
setTimeout(reject, TIMEOUT*1000);
return doSomethingWrapper();
function doSomethingWrapper(){
if(promise.isRejected()) return;
// Error: Cannot read property 'isRejected' of undefined
if(self.isRejected()) return;
// Error: self.isRejected is not a function
return doSomething().then(resolve, doSomethingWrapper).catch(doSomethingWrapper);
}
});
Любое другое решение?
doSomethingWrapper
вызывается немедленно, обратный вызовsetTimeout
никоим образом не сработает, поэтому в любом случае нет необходимости проверять. - person Ry-♦   schedule 24.08.2015