Javascript .then()方法返回的承诺中承诺了什么?

Javascript .then()方法返回的承诺中承诺了什么?,javascript,node.js,promise,Javascript,Node.js,Promise,我的问题id与Javascript承诺相关。promise构造函数允许我们编写逻辑来解析或拒绝。比如说 let x = true; const promise1 = new Promise(function(resolve, reject) { if (x == true){ // Reject - Resolve logic resolve('Success!'); } else { reject('Rejec

我的问题id与Javascript承诺相关。promise构造函数允许我们编写逻辑来解析或拒绝。比如说

let x = true;
const promise1 = new Promise(function(resolve, reject) {  
if (x == true){                              // Reject - Resolve logic 
    resolve('Success!');
  }
else {
    reject('Reject');
  }
});
但是现在如果我用
链接它,那么(()=>console.log('Hello'))
,在没有提供逻辑的情况下,它是如何被接受还是被拒绝的

promise1.then(() => console.log('Hello') , undefined)
        .then(undefined , () => console.log('World'))
        .catch( () => console.log('Error'));
我的问题是:

1
newpromise
被接受或拒绝,然后调用
。然后()的
onFullilled或onRejected。另外,
.then()
返回一个新的承诺。那么,
.then()

2。我在哪里提供逻辑来解析或拒绝
返回的承诺。然后()
?(就像我在上面的构造函数中所做的那样)

另外,据我所知,函数resolve和reject已经存在于JS中,它们改变了承诺状态

谢谢

功能承诺1(数据){
返回新承诺(功能(解决、拒绝){
解析(++数据);
});
}
功能承诺书2(数据){
返回新承诺(功能(解决、拒绝){
解析(++数据);
});
}
承诺人1(1)
.然后(数据=>promise2(数据))
.then(data=>console.log(data))
功能承诺1(数据){
返回新承诺(功能(解决、拒绝){
解析(++数据);
});
}
功能承诺书2(数据){
返回新承诺(功能(解决、拒绝){
解析(++数据);
});
}
承诺人1(1)
.然后(数据=>promise2(数据))

.then(data=>console.log(data))一幅画抵得上1000字:


一幅画抵得上1000字:


正如您正确提到的,承诺总是会返回一个新的承诺。可以处于挂起已解决状态

此外,如果它解决了,它可以被拒绝,原因是(意味着承诺没有做它应该做的事情),或者解决了值问题(意味着承诺成功完成了它的任务)

现在,如果你在某个地方使用这个承诺

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;
})
重要的部分是如果你在投掷或从挡块返回
阅读更多。

正如您正确提到的,承诺总是会返回新的承诺。可以处于挂起已解决状态

此外,如果它解决了,它可以被拒绝,原因是(意味着承诺没有做它应该做的事情),或者解决了值问题(意味着承诺成功完成了它的任务)

现在,如果你在某个地方使用这个承诺

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;
})
重要的部分是如果你在投掷或从挡块返回
阅读更多信息。

您是否打算在
if(x==true)
中省略
else
,这意味着当x为true时它将解析并拒绝?@Wyck typo。已修复。@Wyck无法拒绝已解决的承诺
console.assert(true==wait new Promise((resolve,reject)=>{resolve(true);reject(false)}))
@BlueWater86解析后不拒绝的好风格:看这是一个打字错误。见lynxx的评论。同意。只是想指出一点,承诺不能同时解决和拒绝。你的意思是在
if(x==true)
中省略
else
,这意味着当x为true时,它将同时解决和拒绝?@Wyck typo。已修复。@Wyck无法拒绝已解决的承诺
console.assert(true==wait new Promise((resolve,reject)=>{resolve(true);reject(false)}))
@BlueWater86解析后不拒绝的好风格:看这是一个打字错误。见lynxx的评论。同意。我只是想指出,一个承诺不能既解决又拒绝。