Мне трудно понять разницу между установкой .catch(function (err) ПЕРЕД и ПОСЛЕ, затем вложенным обещанием. Это
test1Async(10).then(function (lol) {
return test2Async(22)
.then(function (lol) {
return test3Async(100);
}).catch(function (err) {
throw "ERROR AFTER THEN";
});
}).then(function (results) {
console.log(results);
}).catch(function (err) {
console.log(err);
});
и этот
test1Async(10).then(function (lol) {
return test2Async(22)
.catch(function (err) {
throw "ERROR BEFORE THEN";
})
.then(function (lol) {
return test3Async(100);
});
}).then(function (results) {
console.log(results);
}).catch(function (err) {
console.log(err);
});
Поведение каждой функции выполняется следующим образом: test1 сбой, если число <0
test2 терпит неудачу, если число > 10
и test3 сбой, если число не 100
. В этом случае test2 только терпит неудачу.
Я попытался запустить и сделать сбой test2Async, и BEFORE, и AFTER ведут себя одинаково и не выполняют test3Async. Может ли кто-нибудь объяснить мне основное различие для размещения уловов в разных местах?
В каждой функции я console.log(Запуск теста X), чтобы проверить, выполняется ли она.
Этот вопрос возникает из-за предыдущего потока, который я разместил Как превратить вложенный обратный вызов в обещание?. Я полагаю, что это другая проблема и стоит опубликовать другую тему.