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函数中抛出的错误?我无法理解它?
答案 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
的稳定时间(不受异步(!)setInterval
和calc
函数的执行时间影响),您可能需要调用{如果不再需要,请立即{1}}及cancel。或者,实施accurate timer。