что обещано в обещании, возвращенном методом .then ()? - PullRequest
0 голосов
/ 10 января 2020

Идентификатор моего вопроса, связанный с Javascript обещаниями. Конструктор обещаний позволяет нам написать логи c для разрешения или отклонения. Например,

let x = true;
const promise1 = new Promise(function(resolve, reject) {  
if (x == true){                              // Reject - Resolve logic 
    resolve('Success!');
  }
else {
    reject('Reject');
  }
});

Но теперь, если я приковываю его цепью к .then ( () => console.log('Hello')), как он будет принят или отклонен без предоставленной логики c?

promise1.then(() => console.log('Hello') , undefined)
        .then(undefined , () => console.log('World'))
        .catch( () => console.log('Error'));

Мой вопрос:

1. new Promise принимается или отклоняется, а затем вызывается .then()'s onFullilled или onRejected. Также .then() возвращает новое Обещание. Итак, что обещано в возвращенном обещании .then()?

2. Где я могу предоставить логи c для разрешения или отклонения обещания, возвращенного .then()? (Как я делал в конструкторе выше)

Кроме того, насколько мне известно - функции разрешения и отклонения уже присутствуют в JS и они изменяют состояние Promise

Спасибо

Ответы [ 3 ]

2 голосов
/ 10 января 2020

Картинка стоит 1000 слов:

enter image description here

0 голосов
/ 10 января 2020

Как вы правильно упомянули, обещание всегда возвращает новое обещание. Это может быть либо в ожидании , либо разрешено состояние.

Кроме того, если он разрешается, он может быть либо отклонен по причине (то есть обещание не выполнило того, что должен был сделать), либо разрешается со значением (имеется в виду, что обещание успешно выполнило свою задачу).

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;
})

Важной частью является , если вы бросаете или возвращаетесь из блока захвата ? Подробнее о документах .

0 голосов
/ 10 января 2020

function promise1(data) {
	return new Promise(function(resolve, reject) {
		resolve(++data);
	});
}

function promise2(data) {
	return new Promise(function(resolve, reject) {
		resolve(++data);
	});
}

promise1(1)
	.then(data => promise2(data))
	.then(data => console.log(data));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...