我有一项服务,检查我的数据库中是否存在序列号 我希望服务返回序列的条形码(如果存在),如果不存在,则返回“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;
}
});
});
});
}
});
有什么想法吗?
答案 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
});
}
}