首页 > 解决方案 > AngularJs 承诺在失败时执行

问题描述

我有以下代码:

CaseFolderResource
 .exportByCaseId()
 .getWithGenericResponse(
    {caseId : request.caseId}, 
    function (result) {
      console.log(result);
      console.log('in 4')
    }, 
    ErrorHandler.handleError
  )
 .$promise
 .then(
   function (success) {
     console.log(success);
     console.log('in 2');
     console.log('success');

     CaseFolderResource
     .getByCaseId()
     .getWithGenericResponse(
       {caseId : request.caseId}, 
       function (result) {
         console.log('nested call');
         console.log(result);
       }
     );
   },  
   ErrorHandler.handleError
 );

console log我看到in然后in 2甚至success输出失败所以承诺日志: datawith success:false.

我在第一个和第二个承诺上得到了 HTTP 500。

编辑:

getWithGenericResponse是:

        getWithGenericResponse: {
            method: 'GET',
            interceptor: genericResponseInterceptor,
            headers: {
                'Authorization': function () {
                    return AuthHolder.getAuthData();
                },
                'X-Company': function(){
                    return getCompany();
                }
            }
        },

genericResponseInterceptor是:

var genericResponseInterceptor = {
    response: function (data) {
        var response = data.data;
        console.log(response);
        if (data.status === 401 || data.status === 403) {
            reject();
        } else if (!response.success && response.errors !== undefined && response.errors !== null) {
            response.errors.forEach(function (error) {
                console.log(error.code);
                if (error.message) {
                    ToasterService.showTranslatedWarningToasterInstant(error.message);
                } else {
                    ToasterService.showTranslatedWarningToaster('error.' + error.code, {params: error.args});
                }
            });
        }
        return response;
    },
    responseError: function (data) {
        if (data.status === 401) {
            reject();
        } else if (data.status === 403) {
            ToasterService.showTranslatedErrorToaster('error.message.403');
        } else {
            ToasterService.showTranslatedErrorToaster('error.message.default');
        }
        return data;
    }
};

即使我,ErrorHandler.handleError从第一个请求中删除:结果与上述相同。

编辑:

我可以解决它if (response.data.success)

CaseFolderResource.exportByCaseId().getWithGenericResponse({caseId : request.caseId}).$promise
                    .then(function (response) {
                        console.log(response.data);
                        console.log(response.success);
                        if (response.data.success) {
                            console.log('in 2');
                            console.log('success');
                            CaseFolderResource.getByCaseId().getWithGenericResponse({caseId : request.caseId}, function (result) {
                                console.log('nested call');
                                console.log(result);
                            });
                        }
                        });

标签: angularjspromise

解决方案


推荐阅读