我在兑现承诺,我想要一种在回调中拒绝承诺的方法。因此,这可以通过调用throw return或return Promise.reject();来完成。到现在为止还挺好。您还可以通过调用新的Promise.reject()来完成此操作。没有回报。
有人可以解释为什么这样做吗?
new Promise((res, rej) => {
setTimeout(() => {
res(200);
}, 2000);
})
.then(() => {
console.log("ok1");
new Promise.reject();
// return Promise.reject();
.then(() => {
console.log("ok2");
})
.catch(() => {
console.log("error");
});
答案 0 :(得分:2)
new Promise.reject()
您的代码引发异常。异常导致承诺被拒绝。
答案 1 :(得分:1)
由于Promise.reject
不是构造函数,因此此代码可以正常工作:
new Promise((res, rej) => {
setTimeout(() => {
res(200);
}, 2000);
})
.then(() => {
console.log('ok1')
Promise.reject('error!')
})
.then(() => {
console.log("ok2");
})
.catch(() => {
console.log("error");
});
答案 2 :(得分:1)
New Promise.reject引发错误,因此代码跳至具有以下错误的catch部分:Promise.reject is not a constructor
new Promise((resolve, reject) => {
setTimeout(() => {
resolve('OK');
}, 2000);
}).then((res) => {
console.log(res);
new Promise.reject();
})
.then((res) => {
console.log(res);
})
.catch((err) => {
console.log('error' ,err.message);
});
答案 3 :(得分:1)
那是因为Promise.reject
的内部运作。它基本上可以做到:
Promise.reject = function(err) {
return new this((_, rej) => rej(err));
};
现在,如果您使用new
进行调用,则this
指的是一个新创建的对象,它不是构造函数。
Promise.reject(); // this == Promise -> constructor
new Promise.reject(); // this == {} -> not a constructor
因此,.then
回调引发一个错误,并且该错误导致返回的Promise被拒绝。