Javascript .then()方法返回的承诺中承诺了什么?
我的问题id与Javascript承诺相关。promise构造函数允许我们编写逻辑来解析或拒绝。比如说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
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'));
我的问题是:
1newpromise
被接受或拒绝,然后调用。然后()的
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的评论。同意。我只是想指出,一个承诺不能既解决又拒绝。