我的控制器包含一个函数,该函数使用从视图中收集的一些范围值对服务进行两个函数调用。
$scope.sendValues = function () {
MyService.function1($scope.value1, $scope.value2);
for(var i = 0; i < $scope.arr.length; i++) {
$scope.value3 = $(".input" + i).val();
MyService.function2($scope.value3);
}
};
这两个服务功能都发出一个http请求,它们看起来类似于以下内容:
var tempID = 0;
var function1 = function (value1, value2) {
return $http({
method: 'POST',
url: "someUrl",
data: {
valeu1: value1,
value2: value2
}
}).success(function (response) {
tempID = response.data.id;
});
};
现在,第二个函数需要来自function1的值“ tempID”。
var function2 = function (value3) {
return $http({
method: 'POST',
url: "anotherURL",
data: {
value3: value3,
tempID: tempID
}
});
};
问题是,有时function2在function1完成之前运行,这导致tempID为声明值0。我如何确保function1在function2运行之前完成?我知道我可以将function2放到function1的成功/完成中,但是然后我如何获取在控制器函数中循环的视图值。
最佳答案
你可以利用诺言
var function1 = function (value1, value2) {
return $http({
method: 'POST',
url: "someUrl",
data: {
valeu1: value1,
value2: value2
}
}).then(function (response) {
tempID = response.data.id;
retrun tempID;
});
};
var function2 = function (value3, tempID) {
return $http({
method: 'POST',
url: "anotherURL",
data: {
value3: value3,
tempID: tempID
}
});
};
你会这样打电话
function1('some value1', 'some value2').then(function(id){
function2('your value 3', id).then(function(resp){
// whatever you want to do with this response
});
});
关于javascript - 在function1完成后运行function2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38031245/