[英]Catching errors in ES6 promises
有没有人对ES6承诺有任何想法,我在我的Node应用程序中使用它们,我喜欢它们,大多数情况下。 但是我发现如果我在一个解决回调中遇到某种错误,它就不会抛出错误或者执行拒绝回调,它会让我的服务器无限地挂起。
现在我已经采取了这样做,并手动拒绝了捕获错误的承诺,但我不确定这是一个很好的处理方式,和/或我是否应该使用promises。
this.dataStore.set(newID, value).then( (foo) => {
try{
this.var = foo;
res({val: foo});
}catch(e){
rej(e);
}
}, (e) => {
rej(e);
});
我认为混淆的原因在于,基于你对res
和rej
使用,你可能会在promise构造函数中调用它,
function setStore(newID, value) {
return new Promise(function(res, rej) {
this.dataStore.set(newID, value).then( (foo) => {
try{
this.var = foo;
res({val: foo});
}catch(e){
rej(e);
}
}, (e) => {
rej(e);
});
});
}
顺便说一句, (e) => { rej(e); }
(e) => { rej(e); }
在端部可以被重写为e => rej(e)
,这反过来又可以被重写为rej
。
但无论如何,你不需要任何周边机器来创建并返回自己的诺言,因为this.dataStore.set
和/或随后的调用then
已经创建了一个承诺,你可以回原样。 而不是创建自己的新承诺,然后使用基于传递给then
的结果的小哈希来解析新的承诺,只需返回哈希 - 这将成为结果承诺的值。 当对dataStore.set
的调用失败时,不要拒绝新的promise,只需让失败的promise成为自己。
所以你不应该做任何比这更复杂的事情
function setStore(newID, value) {
return this.dataStore.set(newID, value).then(foo => {
this.var = foo;
return {val: foo};
});
}
this.var = foo; return {val: foo};
发生错误this.var = foo; return {val: foo};
this.var = foo; return {val: foo};
部分(但它怎么可能?)会自动将承诺置于失败状态。 由this.dataStore.set
导致的失败将导致失败的承诺,并且没有必要捕获它并重新抛出它 - 失败将在链中快速进行。
用它作为:
setStore('abc', 123)
.then(hash => console.log(hash.val))
.catch(e => console.log("The sky is falling", e));
作为澄清,在以下内容中:
promise.then(success, failure)
success
回调中出现的错误不会在failure
回调中处理。 success
回调中的失败将在链的连续阶段中处理。 你可以用success
处理失败(或promise
自己)
promise.then(success).catch(failure)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.