Как вы правильно упомянули, обещание всегда возвращает новое обещание. Это может быть либо в ожидании , либо разрешено состояние.
Кроме того, если он разрешается, он может быть либо отклонен по причине (то есть обещание не выполнило того, что должен был сделать), либо разрешается со значением (имеется в виду, что обещание успешно выполнило свою задачу).
let x = true;
const promise1 = new Promise(function(resolve, reject) {
if (x === true){
resolve('Success!');
}
else {
reject('Reject');
}
});
Теперь, если вы используете это обещание где-то вроде
promise2 = promise1.then(val => {
console.log(val); //logs "Success!"
return "resolved value for promise2"
})
Далее ,
promise3 = promise2.then(val => {
console.log(val); //logs "resolved value for promise2"
return "some resolved value"
})
Теперь вернемся к функции конструктора, для x=false
,
promise2 = promise1.catch(err => {
console.log(err) //logs "Reject";
return "resolved value from catch block";
})
promise3 = promise2.then(val => {
console.log(val); //logs "resolved value from catch block"
return "some resolved value"
})
или вы можете сгенерировать ошибку для ее распространения,
promise2 = promise1.catch(err => {
console.log(err) //logs "Reject";
throw "rejected value from catch";
})
promise3 = promise2.catch(val => {
console.log(val); //logs "rejected value from catch"
throw err;
})
Важной частью является , если вы бросаете или возвращаетесь из блока захвата ? Подробнее о документах .