我与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状态
谢谢
答案 0 :(得分:2)
一张图片价值1000字:
答案 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。