返回$ http内的父函数

时间:2016-05-01 14:12:45

标签: javascript angularjs ajax

我有一项服务,检查我的数据库中是否存在序列号 我希望服务返回序列的条形码(如果存在),如果不存在,则返回“false”。

我的代码似乎不起作用,因为我处于内在功能中 我已经尝试在响应时调用另一个函数,但它不会影响我的范围。

这是我的代码:

  $scope.checkSerial = function(e) {
    if (e.which==9) {
      res = serialChecker.check($scope.itemsData, $scope.serial, e);
    }
  }    

.service('serialChecker', function($log, $http) {
 this.check = function(_itemsData, _serial, e) {
   isok = false;
     // Fetch serial barcode
     config = {
       params: { serial: _serial, action: 'check_serial' }
     };
     $http.get("srvr.php", config)
     .then(function(bcresponse) {
       $log.info("Currently looking at serial: " + _serial);
       barcode = bcresponse.data.barcode;
       if (barcode==false) {
         return false;
       }
       angular.forEach(_itemsData, function(value, key){
           angular.forEach(value.Items, function(value, key) {
             if (value.Codebars == barcode) {
               return barcode;
             }
           });
        });
     });
 }
});

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

$http.get是一个异步函数,它返回promise,而不是调用的结果。要使用结果,请将then函数添加到serialChecker.check承诺链:

.service('serialChecker', function($log, $http) {
  this.check = function(_itemsData, _serial, e) {
    // Fetch serial barcode
    config = {
      params: { serial: _serial, action: 'check_serial' }
    };
    return $http
      .get("srvr.php", config)
      .then(function(bcresponse) {
        $log.info("Currently looking at serial: " + _serial);
        barcode = bcresponse.data.barcode;
        if (barcode==false) {
          return false;
        }
        angular.forEach(_itemsData, function(value, key){
          angular.forEach(value.Items, function(value, key) {
            if (value.Codebars == barcode) {
              return barcode;
            }
          });
        });
    });
  }
});

$scope.checkSerial = function(e) {
  if (e.which === 9) {
    // TODO: show progress indicator
    serialChecker
      .check($scope.itemsData, $scope.serial, e)
      .then(function(res) {
        // TODO: here you can use result
      })
      .catch(function(err) {
        // TODO: process error 
      })
      .finally(function() {
        // TODO: hide progress indicator 
      });
  }
}