3

私はプロミスに Q を使用していますが、いくつかのテストをセットアップするときに、プロミスを返す関数内でスローされた非同期エラーをキャッチする方法を発見しました。

私はそれを a 内にラップしてチェーン化しようとしましたがQ.whenfail以下のように aQ.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); 
            })

これに方法はありますか?

4

1 に答える 1

2

の例外はsetTimeout、プロミスとは関係ありません。 --block を使用して自分でキャッチする必要があり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));
于 2013-03-19T17:44:28.470 に答える