В моем коде, я использую библиотеку Q в цепи нескольких вызовов API следующим образом:Разрешающая с середины обещание цепи
function long_promise_chain() {
var q = Q.defer();
call_api_batch1()
.then(function(v) {
if (v.bar) {
q.resolve();
} else {
return call_api_batch_2();
}
})
.then(function(v) {
if (v.bar) {
q.resolve();
} else {
return call_api_batch_3();
}
})
.then(function(v) {
if (v.bar) {
q.resolve();
} else {
return call_api_batch_3();
}
}, function(err) {
console.log("err: " + err);
});
return q.promise
}
Я вижу, что даже если цепь будет решен после того, как первый batch следующий блок then
получает прогон и вызывает ошибку - пытается получить доступ к неопределенной переменной, а затем вызывает блок функции (err).
Не могли бы вы предложить правильный путь решения рано.
Обновление: Проблема в том, что если вызывается первый q.resolve(), я не хочу, чтобы следующий. Then в цепочке запускался. В то время как q.resolve вызывается правильно и возвращает управление вызывающему, печатается ошибка, потому что во втором случае нет «v», а ошибка «Не удается прочитать панель свойств неопределенного» при тестировании v. бар.
* «и вызывает ошибку - пытается получить доступ к неопределенной переменной, а затем вызвать функцию (ERR) блок» * Там нет выше код пытается получить доступ к неопределенной переменной. –
Полезно сделать код простым, но в этом случае я боюсь, что вы тоже сделали это * generic. Непонятно, какие последующие функции 'then' предназначены для использования из резолюции предыдущего обещания, которая, как представляется, важна здесь. –
Спасибо за комментарий. Я постараюсь обновить вопрос. – user2738707