处理角度承诺中的错误

Handling Errors In Angular Promises

本文关键字:错误 承诺 处理      更新时间:2023-09-26

我仍在学习 angular 中的承诺,并且有这段代码,我在其中发出两次"GET"请求。我想在调用另一个请求之前运行一个 get 请求。这工作正常,但是我将如何处理这里的错误?如果我的第一个 GET 请求出现错误,如何找出该错误是什么并阻止我的代码调用第二个 GET 请求?使用我的代码的示例将是最有帮助的。

apiServices.login = function(user,password,callback) {
$http.get("http://magainteractive.com/prototypes/cisco-ima-dashboard/cms/web/api/login/login/?username="+user+"&password="+password+"")
        .then(function(contentResponse){
            resultsObject.content = contentResponse; 
            return $http.get("http://magainteractive.com/prototypes/cisco-ima-dashboard/cms/web/api/data/list/"); 
        })
        .then(function(dataResponse){
            resultsObject.reports = dataResponse;
            resultsObject.success = 1;
            console.log(resultsObject);
            callback(resultsObject);
            apiServices.useData(resultsObject);
        }); 
}
dummyData.login(username, password, function (dataStatus) {
            if (dataStatus.success = 1) {
                $rootScope.loggedIn = true;
                $rootScope.selectedDashboard = 1; 
            } else {
                console.log("Error");
            }
        });

我会做与 Lucas 略有不同的事情,我更喜欢链接一个 catch 块(基本上它会像我们使用的同步try...catch块一样),而不是添加一个错误回调函数,所以代码会像:

return $http.get(url1)
  .then(function(result){
    resultsObject.url1 = result;
    return $http.get(url2);
  }).then(function(result){
    resultsObject.url2 = result;
    return resultsObject;
  }).catch(function(error){
    // handle error.
  });

PS:你的大部分代码都很好,但我不太确定你为什么会有这样的callback(resultsObject);,当你使用promises时,回调是多余的,你可以只返回promise链$http.get...

您可以在第一个回调处理中传递第二个参数。如果请求中存在错误,这将触发,然后您可以根据需要处理它:

 $http({
   method: 'GET',
   url: '/someUrl'
 }).then(function successCallback(response) {
     // this callback will be called asynchronously
     // when the response is available
   }, function errorCallback(response) {
     // called asynchronously if an error occurs     
     // or server returns response with an error status.
   });

或者在您的编码中:

$http.get('/someUrl').then(successCallback, errorCallback);

更多信息在这里

您的代码如下所示:

$http.get("http://magainteractive.com/prototypes/cisco-ima-dashboard/cms/web/api/login/login/?username="+user+"&password="+password+"")
    .then(function(contentResponse){
        resultsObject.content = contentResponse; 
        return $http.get("http://magainteractive.com/prototypes/cisco-ima-dashboard/cms/web/api/data/list/"); 
    }, function(error){ 
             //HANDLE ERROR HERE
       })
    .then(function(dataResponse){
        resultsObject.reports = dataResponse;
        resultsObject.success = 1;
        console.log(resultsObject);
        callback(resultsObject);
        apiServices.useData(resultsObject);
    });