Javascript 在角度函数中,不等待完成第一个函数执行
我的函数没有等待完成之前的函数执行,它正在完成 我的代码是我做错了什么:Javascript 在角度函数中,不等待完成第一个函数执行,javascript,angularjs,Javascript,Angularjs,我的函数没有等待完成之前的函数执行,它正在完成 我的代码是我做错了什么: $scope.abc1 = function(){ var arrayJson = [{'name':'max','age':'12'},{'name':'tax','age':'16'}] for(var i=0; i<arratJson.length;i++){ var getAddress = $scope.xyz(arratJson[i].name); } $scope.createBod
$scope.abc1 = function(){
var arrayJson = [{'name':'max','age':'12'},{'name':'tax','age':'16'}]
for(var i=0; i<arratJson.length;i++){
var getAddress = $scope.xyz(arratJson[i].name);
}
$scope.createBody();
};
$scope.createBody = function(){
//some more code here
};
$scope.xyz = function(name){
$http({
method: 'GET',
url: 'rest/address',
type:'json',
headers:{'action':'single','name':name},
}).success(function(response){
return response;
}).error(function(response){
});
};
$scope.abc1=函数(){
var arrayJson=[{'name':'max','age':'12'},{'name':'tax','age':'16'}]
对于(var i=0;i这是由于执行的异步性质而预期的。您应该使用回调来避免此问题。有两种方法可以实现此目的
1) 使用async:false
2) 需要使用回调函数吗
选择你的方式并享受吧!你应该知道承诺在javascript中是如何工作的
$http是一个异步函数。必须在$scope.xyz函数中返回$http result,然后使用success、error函数回调
例如:
function xyz() {
return $http(...);
}
xyz().then(function(data) {
address = data.data.address; // in your json dto format
})
更多信息$http
希望这有帮助!
关于您应该使用该服务。
首先将所有$http
调用存储在一个数组中,然后使用$q.all(array)
创建一个承诺,该承诺在所有$http
承诺得到解决后得到解决
e、 g:
更新
如果您不在乎所有呼叫是否成功,请更换:
$q.all(promises).then($scope.createBody);
与:
PS:请记住,在finally
回调中,不会获得每个调用的返回值,而在中,则会在回调函数中传递一个数组作为参数,该回调函数在每个位置保存每个$http
调用的返回值。可以使用
将承诺状态包含到具有延迟值的自建对象,该对象具有valueOf
和toString
方法。后两种方法允许使用算术、字符串和比较运算符
具有延迟值的对象:
var DeferredValue = function(initial){
var self = this;
self._value = initial;
var deferred = $q.defer();
self.$promise = deferred.promise;
self.$resolved = false;
self.$resolve = function(value){
deferred.resolve(value);
}
self.$promise.then(function(v){
self._value = v;
deferred = null;
self.$resolved = true;
delete self.$resolve;
return self.$promise;
});
}
DeferredValue.prototype = {
constructor: DeferredValue,
valueOf: function(){
return this._value
},
toString: function(){
return this._value.toString()
}
}
在异步函数中返回此对象,并在检索数据后解析它们:
var getValue = function(){
var value = new DeferredValue();
$timeout(function(){
value.$resolve(Math.floor(Math.random() * 10))
},1500);
return value;
}
此处可能存在重复,您只调用一个函数。在此之后是否调用第二个函数?您能给我推荐一个好的示例吗谢谢您的回答..在我的函数中哪里提到async:false;您好,Mayur,只需添加async:false,在类型“json”下或之前,告诉我是否需要更多帮助谢谢您的回答让我试试这个,r埃弗特回到你身边
$q.all(promises)["finally"]($scope.createBody);
var DeferredValue = function(initial){
var self = this;
self._value = initial;
var deferred = $q.defer();
self.$promise = deferred.promise;
self.$resolved = false;
self.$resolve = function(value){
deferred.resolve(value);
}
self.$promise.then(function(v){
self._value = v;
deferred = null;
self.$resolved = true;
delete self.$resolve;
return self.$promise;
});
}
DeferredValue.prototype = {
constructor: DeferredValue,
valueOf: function(){
return this._value
},
toString: function(){
return this._value.toString()
}
}
var getValue = function(){
var value = new DeferredValue();
$timeout(function(){
value.$resolve(Math.floor(Math.random() * 10))
},1500);
return value;
}