(Javascript), почему улов не улавливает отказ? - PullRequest
0 голосов
/ 07 декабря 2018

Ниже приведен код цепочки обещаний:

new Promise(function(resolve, reject) {
  console.log('first');
  resolve('yes');
}).then(
  new Promise(function(resolve, reject) {
    console.log('second');
    reject('no');
  })
).catch(rej => console.log(rej));

И вывод:

'first'

'second'

Я ожидал получить 'нет выхода, но не былоЯ не знаю, почему улов не поймал отказ от второго .then ()?

1 Ответ

0 голосов
/ 07 декабря 2018

.then принимает только функцию в качестве параметра - ваш

then(new Promise

передает вторую .then a Обещание (которое инициализируется *когда создается цепочка Promise, а не когда разрешается предыдущий Promise).Но .then не знает, что делать, когда ему передается Promise, он имеет дело только с функцией параметров.

Вместо этого передайте .then функцию и получите этоФункция создать обещание, которое будет возвращено, и оно будет правильно поймано:

new Promise(function(resolve, reject) {
  console.log('first');
  resolve('yes');
}).then(
  () => new Promise(function(resolve, reject) {
//^^^^^^
    console.log('second');
    reject('no');
  })
).catch(rej => console.log('catch: ' + rej));
...