返回$ http承诺中的完整响应对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了返回$ http承诺中的完整响应对象相关的知识,希望对你有一定的参考价值。

我在我的一个服务中使用此方法来进行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)。

需要帮忙..

答案

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对象具有datastatusheaders等属性。 Documentation.

以上是关于返回$ http承诺中的完整响应对象的主要内容,如果未能解决你的问题,请参考以下文章

Axios 响应承诺对象但需要承诺值

如何跳过查询条件片段中的空对象?

如何根据 HTTP 响应中的条件返回不同的对象类型(.net 核心)

服务器返回无效或不完整的 HTTP 响应

NodeJ使用请求承诺来调用外部API,从响应主体中保存数据

Server是如何完成针对请求的监听接收与响应1