【发布时间】:2018-02-28 03:32:42
【问题描述】:
我在我的 angularJS 中有一个 '$q' 的装饰器,它以这种方式添加了一些额外的方法:
angular
.module('myApi', [])
.config(function ($provide) {
$provide.decorator('$q', function ($delegate) {
var defer = $delegate.defer;
$delegate.defer = function () {
var deferred = defer();
deferred.promise.success = function (fn) {
deferred.promise.then(function(response) {
fn(response.data, response.status, response.headers);
});
return deferred.promise;
};
return deferred;
};
return $delegate;
});
});
但是当我在 api 中执行此操作时,该方法消失了:
var DataFactoryBase = {
get: function (url, headers) {
var dfr = $q.defer();
dfr.resolve( api_bridge ({
execute: function () {
return $q.resolve($http.get(url, {headers: headers}));
}
}));
//this line still holds the decorator method
var withSuccessMethod = dfr.promise;
//this line returns a promise without the decorator methods
var lostSuccessMethod = dfr.promise.then(handlerSuccessResponse, handlerErrorResponse);
return lostSuccessMethod;
}
}
function handlerSuccessResponse(response) {
//do stuff
return $q.resolve(response);
}
function handlerErrorResponse(response) {
//do stuff
return $q.reject(response.data);
}
我怎样才能让 .then 也用成功方法返回一个承诺?
【问题讨论】:
标签: angularjs promise decorator extend