我在我的一项服务中使用此方法进行API调用:
this.postData = function(requestURL, requestObj) {
var deferred = $q.defer();
console.log("Reached APIService @POST", requestURL);
$http.post(requestURL, requestObj).success(
function(data, status, headers, config, statusText) {
deferred.resolve(data, status, headers, config, statusText);
console.log(status);
}).error(
function(data, status, headers, config, statusText) {
deferred.reject(data, status, headers, config, statusText);
console.log(status);
});
return deferred.promise;
};
基本上这很好用,但是最近我在代码中需要头数据来获取异常情况下的错误消息。我很困惑如何在返回的承诺中获得该信息。调用时的上述函数仅返回数据,其余4项未定义。我相信承诺无法解决上述多项问题。
然后我如何返回promise中的对象以获取API返回的对象的全部信息。 (正如文档所说,响应包含5个字段,数据,状态,标题,配置,statusText)。
需要帮助..
答案 0 :(得分:2)
Promise只能解析为一个值,而不是五个,因此传递给resolve
的其余参数将被静默删除。
好消息是$http.post()
本身已经返回一个承诺,所以你可以这样做:
this.postData = function (requestURL, requestObj) {
console.log("Reached APIService @POST", requestURL);
return $http.post(requestURL, requestObj).then(
function (response) {
console.log(response.status);
return response;
}),
function (response) {
console.log(response.status);
throw response;
});
};
或者,没有记录:
this.postData = function (requestURL, requestObj) {
return $http.post(requestURL, requestObj);
};
response
对象包含属性data
,status
,headers
等。 Documentation.