$ q.all()中的错误处理

时间:2016-06-09 05:32:27

标签: javascript angularjs angular-promise

我在控制器中使用了两个工厂电话。在两次捕获中,我想调用单独的函数来处理错误。

我有什么:

someFactory.functionOne().then(function (data) {
    $scope.one = data;
}).catch(functionToHandleOne());

someFactory.functionTwo().then(function (data) {
    $scope.two = data;
}).catch(functionToHandleTwo());

使用$ q.all()之类的

可以做得更好吗?
$q.all({
    one: someFactory.functionOne(),
    two: someFactory.functionTwo()
}).then (function (data) {
    $scope.one = data.one;
    $scope.two = data.two;
}).catch(
  //here I have to call functions functionToHandleOne() and functionToHandleTwo() according to error caused which function call
);

2 个答案:

答案 0 :(得分:1)

你的解决方案非常好。您错过了' catch'中的错误回调功能。当然还有错误论点。

一个例子:

$q.all({
    one: someFactory.functionOne(),
    two: someFactory.functionTwo()
}).then (function (data) {
    $scope.one = data.one;
    $scope.two = data.two;
}).catch(function(e){
 if(e.argument == 'error1')
  functionToHandleOne()();
 else
  functionToHandleTwo()();
});

答案 1 :(得分:0)

var app = angular.module('plunker',[]);

app.factory('json',function($q,$http){

  return function(files){

    var promises = files.map( function(file){

      var deffered  = $q.defer();

      $http({
        url : file,
        method: 'GET'
      }).
      success(function(data){
        deffered.resolve(data);
      }).
      error(function(error){
          deffered.reject();
      });

      return deffered.promise;

    })

    return $q.all(promises);
  }

});

app.controller('MainCtrl', function($scope,json) {
  $scope.name = 'World';

  json(['a.json','b.json']).then(function(datas){
    $scope.a = datas[0]
    $scope.b = datas[1]
  })

});

在上面的完整代码中,您可以找到所需的一切。喜欢

$ q在工厂通过,如果你有多个功能,你可以将所有功能调用到单个工厂,并根据需要定制它们。

你可以在控制器中看到如下面的代码所示,它将返回数据。

  json(['a.json','b.json']).then(function(datas){
    $scope.a = datas[0]
    $scope.b = datas[1]
  })

“datas”返回所有调用的多个值,因此您需要使用数组。

如果解决或需要更多研究,请告诉我

khajaamin