.then()方法返回的承诺中所承诺的是什么?

时间:2020-01-10 05:10:04

标签: javascript node.js promise

我与Javascript许诺相关的问题ID。 promise构造函数允许我们编写逻辑来解决或拒绝。例如

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'))链接起来,那么在没有提供逻辑的情况下如何接受或拒绝它?

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

我的问题是:

1。 new Promise被接受或拒绝,然后调用.then()'s onFullilled或onRejected。另外,.then()返回一个新的Promise。那么,.then()在返回的承诺中所承诺的是什么?

2。我在哪里提供解决或拒绝.then()返回的诺言的逻辑? (就像我在上面的构造函数中所做的一样)

另外,据我所知-JS中已经存在解析和拒绝功能,并且它们会改变Promise状态

谢谢

3 个答案:

答案 0 :(得分:2)

一张图片价值1000字:

link

答案 1 :(得分:0)

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

答案 2 :(得分:0)

正如您正确提到的那样,一个承诺总是会返回一个新的承诺。该状态可以为待处理已解决状态。

如果它进一步解决,则可以 因某种原因被拒绝 (意味着诺言没有按照预期做)或 已解析为值 (表示诺言已成功完成其任务)。

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

重要的部分是如果您是从捕获区投掷或返回? 进一步了解docs