如何在拒绝时简单地改变q.js-promise'errormessage'?

时间:2013-03-11 13:35:24

标签: asynchronous promise q

我正在使用Q.js作承诺。

我想知道在Q-promise失败时是否可以快速格式化/更改错误消息。

考虑一个人为的例子:

           return Q.when(//$.ajaxpromise for instance).then(function(result){
                    //handle result
                }).fail(function(err){
                    //somehow change err (returned from $.ajax) to something
                    //sensible (say the statuscode + responseText) and
                    //push it up the callstack
                });

当然,我可以做以下事情,但感觉有点麻烦:

             var deferred = Q.defer(); 
             Q.when( //$.ajaxpromise for instance).then(function(result){
                    //handle result
                    deferred.resolve();
                }).fail(function(err){
                    deferred.reject(new Error(err.responseText));
                });
             return deferred.promise;

无论如何要更优雅地做到这一点?

1 个答案:

答案 0 :(得分:1)

Q promises(以及任何Promises / A +实现)的精彩之处在于你只能throw

return Q.when(otherPromise)
    .then(function (result) { /* handle result */ })
    .fail(function (err) { throw new Error('A real error!'); });

您可以在"Propagation" section of the Q readme

中找到此信息