让我们说我有一个函数,它接受一些输入并对promise内的输入进行一些操作。如果输入是"无效"而不是仅仅在拒绝状态下返回承诺。我喜欢我的函数抛出错误。问题是,现在承诺捕获错误并转移到拒绝状态。这可能吗?
示例:
function myFunc(input) {
return new Promise(function(resolve, reject) {
if (input) {
resolve();
} else {
throw 'invalid input!'; // ideally this should really throw, rather than just reject
}
});
}
我一直在玩这个并开始认为这是不可能的,但我想我会问这里是否有人知道如何实现这一点。提前谢谢。
答案 0 :(得分:1)
您可以在构建返回Promise之前检查输入并扔到那里。这就是投入myFunc。
function myFunc(input) {
if (!input)
throw "invalid input!"
return new Promise(function(resolve, reject) {
// do stuff
resolve(result);
//if doesn't work
reject(reason);
});
}
如果输入为空,它将不会为您提供promise对象并抛出错误,这是您想要的。
try{
myFunc();
}
catch(e)
{
console.log("It does throw and doesn't give you the promise", e)
}
如果你想让诺言中的代码说出来,那就是一个错误,你真正需要做的就是拒绝...这就是拒绝的目的。基本上如果你想投入你要归还的承诺,你应该拒绝。
使用承诺时拒绝并捕获错误。
p1.then((result) => {
// deal with result
})
.catch((reason)=>{
// you get the error you rejected in the promise
});