有没有人对 ES6 promise 有任何想法,我在我的 Node 应用程序中使用它们并且我很喜欢它们,在大多数情况下。但我发现,如果我在解析回调中遇到某种错误,它不会抛出错误或执行拒绝回调,它会让我的服务器无限挂起。
现在我已经采取了这样做,并手动拒绝了捕获错误的 promise ,但我不确定这是否是一种很好的处理方式,和/或我是否应该使用 promise 。
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)
, 又可以重写为 rej
.
但是无论如何,您不需要任何周围的机器来创建和返回您自己的 promise ,因为 this.dataStore.set
和/或随后调用 then
已经创建了一个 promise ,您可以按原样返回。而不是创建你自己的新 promise ,然后根据传递给 then
的结果用小散列解决你的新 promise 。 ,只需返回哈希——这将成为最终 promise 的值(value)。而不是在调用 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};
中发生错误部分(但怎么可能呢?)会自动将 promise 置于失败状态。 this.dataStore.set
导致的故障将按原样产生一个失败的 promise ,并且没有必要捕获它并重新抛出它——失败将在链条中愉快地进行下去。
将其用作:
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)
关于javascript - 捕获 ES6 promise 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30165690/