javascript - 捕获 ES6 promise 中的错误

标签 javascript node.js promise ecmascript-6

有没有人对 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/

相关文章:

javascript - 嵌套在 JSON 对象数组中的 JSON 对象数组

node.js - 为什么 nodejs express post 请求中 'body' 为空?

javascript - 如何使用express js路由器解决CORS重定向?

Node.js 同步返回多个异步yield结果

javascript - d3.js,可折叠树 - 如何将不同的 parent 与同一个 child 联系起来

javascript - Node Js - 使用正则表达式向路由添加多个参数

javascript - jQuery ASP.net Web 服务消耗

javascript - 如何从简单的 json 制作所需的 json 树

node.js - 从 then 函数内访问 Promise 对象

javascript - AngularJS:forEach http 获取数据 - 等待其他方法,直到加载循环中的所有数据