使用Q.promises:如何捕获异步抛出?

时间:2013-03-19 16:00:38

标签: javascript promise q

我正在使用Q作为promises,但是在设置一些测试时,我发现我看到了捕获在返回promise的函数内抛出异步错误的方法。

我尝试将其封装在Q.when内并链接fail和/或Q.fcall以及链式fail,但我无法将其链接到 var func = function(){ var deferred = Q.defer(); setTimeout(function(){ throw new Error("async error"); },100); return deferred.promise; } Q.fcall(func) .then(function(){ console.log("success"); }) .fail(function(err){ console.log(err); }) 工作。

{{1}}

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:2)

setTimeout中的异常无论如何都与承诺无关,你必须自己使用try - catch - 阻止它。

或者您使用Q.delay

function func(){
    return Q.delay(100).then(function(){
        throw new Error("async error");
    });
}

func()
.then(console.log.bind(console, "success"))
.fail(console.log.bind(console));