3

我将 Q 用于 Promise,但是在设置一些测试时,我发现我看到了捕获返回 Promise 的函数中抛出的异步错误的方法。

我试图将它包裹在 aQ.when和链 afail和或在 aQ.fcall和 a 链下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); 
            })

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

4

1 回答 1

2

中的异常setTimeout无论如何都与承诺无关,您必须自己使用 --block 来捕获trycatch

或者你使用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));
于 2013-03-19T17:44:28.470 回答