捕获Bluebird中setinterval函数内引发的错误

时间:2015-07-15 17:52:18

标签: javascript node.js bluebird

this.custFunc = Bluebird.method(function (id)) {

    var interval = setInterval(function () {
                calc(id)
                .then(function (flag) {
                    if (flag) {
                        execProg(id, interval);
                    }
                })
                .catch(function (err) {
                    return Bluebird.reject(err);
                });
            }, pollingInterval);
});

如何捕获setinterval函数中抛出的错误?我无法理解它?

1 个答案:

答案 0 :(得分:0)

  

如何捕获setinterval函数中抛出的错误?

你做不到。这是一个异步回调,承诺不会抓住这些。您可以明确地执行Col4(或try catch),但这不是正确的解决方案。另请参阅here

  

我无法弄清楚

Promise.try与promises一起使用效果不佳,后者代表单一结果。你的setInterval没有在间隔结束时返回一个承诺,它应该是。

通过将其重构为递归解决方案,您可以使一切变得更简单:

custFunc

您可能需要稍微重新调整this.custFunc = function(id) { return Promise.delay(pollingInterval).then(function() { return calc(id); }).then(function(flag) { if (flag) { return execProg(id); } }).bind(this).then(function() { if (/*you want to break the interval*/) return result; else return this.custFunc(id); }); }); 以指示继续 / 中断作为返回值,而不是通过调用execProg - 或者只需从clearInterval内进行递归调用。

如果您依赖execProg的稳定时间(不受异步(!)setIntervalcalc函数的执行时间影响),您可能需要调用{如果不再需要,请立即{1}}及cancel。或者,实施accurate timer