chelitsy
@chelitsy
все при мне

Как прервать выполнение цепочки промисов?

Как, в зависимости от текущего результата продолжить или прервать выполнение цепочки промесив?
var p1 = new Promise(function(resolve, reject) {
    let a=2
    if (a>1){resolve("Успех!")}
    else{reject("Ошибка!")}
  });
  
  p1.then(function(value) {
    console.log(value); // Успех! (скрипт продолжает выполнятся )
    return value
  }, function(reason) {
    console.log(reason); // Ошибка! (Тут Скрипт должен прервать дальнейшее выполнение!)
  })
  .then(function(value){
      console.log(value + ' Следующее действие.') //Успех! Следующее действие
  })

Если «a=2» Результат: «Успех! Следующее действие.» Если «a=1» Результат: «undefined Следующее действие.» Необходимо прервать выполнение на «Ошибка!»
  • Вопрос задан
  • 1089 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
.then(onFulfilled, onRejected)вторая функция «ловит» ошибку и обрабатывает её, поэтому выполнение не прерывается.

Вариант А. просто уберите её. И ловите ошибки в .catch() в конце цепочки.

Вариант Б. возвращайте отвергнутый промис:
// ...
, function(reason) {
    console.log(reason); // Ошибка! (Тут Скрипт должен прервать дальнейшее выполнение!)
    return Promise.reject(reason); // передаём пас с ошибкой дальше по цепочке
  })
и всё равно добавьте в конце блок .catch()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@tantumus21
При ошибке в любом случае цепочка прервется. И перейдет в блок catch, которого у вас нет
Ответ написан
chelitsy
@chelitsy Автор вопроса
все при мне
let a=1
const p1 = (new Promise(function(resolve, reject) {
    if (a>1){resolve("Успех!")}
    else{reject("Ошибка!")}
  }))
  .then((value)=> {
    console.log(value);     // Успех!
    return value            // Возвращаю результат
  }, (reasonnn)=> {
    console.log(reasonnn);    // Ошибка!
    return  reject(reasonnn);  // Возвращаю отклонение
  })
  .then(()=>{
      console.log('Следующее действие!') // Следующее действие с результатом
  })
  .catch(()=> {
    console.log('catch'); // Действие с отклонением
  })
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы