我只想问一下,如果解决方案的价值不合适,我应该如何将解决承诺传递给catch
。
e.g。
let prom = getPromise();
prom.then(value => {
if (value.notIWant) {
// Send to catch <-- my question is here, I want to pass it on the catch.
}
// Process data.
}).catch(err => {
// Pass the error through ipc using json, for logging.
});
我尝试使用throw
,但该对象无法解析为json,只是得到一个空对象。
解答:
@BohdanKhodakivskyi下面的第一条评论是我想要的答案。
@ 31py答案也是正确的,但@BohdanKhodakivskyi解决方案更加简单,并且会产生相同的结果。
答案 0 :(得分:3)
您只需返回被拒绝的承诺:
prom.then(value => {
if (value.notIWant) {
return Promise.reject('your custom error or object');
}
// Process data.
}).catch(err => {
console.log(err); // prints 'your custom error or object'
});
.catch
实际上处理链中的任何承诺拒绝,因此如果您返回被拒绝的承诺,控件会自动转到catch
。
答案 1 :(得分:3)
只需使用throw value;
即可。在你的情况下:
prom.then(value => {
if (value.notIWant) {
// Send to catch
throw value;
}
// Process data.
}).catch(err => {
// Pass the error through ipc using json, for logging.
});
请注意使用Promise.reject()
和throw
之间的差异和限制,this question中有完整描述。例如,throw
在某些async
方案中无效。
答案 2 :(得分:1)
为什么你不重新抛出错误? throw new Error("something");
答案 3 :(得分:0)
您可以在functions
之外使用它来执行此操作:
var processData = function(data) {
// process data here
}
var logIt = function(data) {
// do logging here..
}
let prom = getPromise();
prom.then(value => {
if (value.notIWant) {
// Send to catch <-- my question is here, I want to pass it on the catch.
logIt(/*pass any thing*/);
}
// Process data.
processData(data);
}).catch(err => {
logIt(/*pass any thing*/);
});