Javascript 在第一个请求完成后调用第二个请求
我有一个关于请求的问题。我发出第一个请求,然后我假设第一个onSuccess方法将运行,但程序立即发出第二个请求。我如何处理它<代码>上下文。getAlarmGroupById立即被调用2次。 我的代码:Javascript 在第一个请求完成后调用第二个请求,javascript,angularjs,Javascript,Angularjs,我有一个关于请求的问题。我发出第一个请求,然后我假设第一个onSuccess方法将运行,但程序立即发出第二个请求。我如何处理它上下文。getAlarmGroupById立即被调用2次。 我的代码: 函数loadAll(){ Context.getAlarmGroupChainById({ id:$stateParams.id }、成功、失败); 函数onSuccess(数据、标题){ vm.temp=数据; var numberGroupChain=vm.temp.length; 对于(变量i=
函数loadAll(){
Context.getAlarmGroupChainById({
id:$stateParams.id
}、成功、失败);
函数onSuccess(数据、标题){
vm.temp=数据;
var numberGroupChain=vm.temp.length;
对于(变量i=0;i=vm.temp.length){
返回;
}
Context.getAlarmGroupById({
id:chainId
}、成功、失败);
函数onSuccess(数据、标题){
索引++;
异步循环();
}
函数onError(数据、标题){
索引++;
异步循环();
}
}
}
首先:Car.getGroupId
是一个异步函数。因此,您必须确保在下一次呼叫之前完成上一次呼叫
其次:创建递归函数以替换循环,在成功
函数和索引增量后,调用递归函数以确保您所需的需求
Third:更改asyncLoop(vm.temp[i].id)的调用顺序代码>循环后:
最后:
请使用以下代码:
function loadAll () {
var index = 0;
function asyncLoop(chainId) {
if(index >= vm.temp.length) {
return;
}
Context.getAlarmGroupById({
id:vm.temp[index].id
}, onSuccess, onError);
function onSuccess(data,headers){
index++;
asyncLoop();
}
function onError(data,headers){
index++;
asyncLoop();
}
}
function onSuccessParent(data, headers) {
vm.temp=data;
var numberGroupChain=vm.temp.length;
for(var i=0; i<numberGroupChain; i++){
vm.location.push(vm.temp[i].location);
vm.alarmChainList.push({name: vm.location[i],active:null,totalAlarmGroupNumber:null});
//loadData(vm.temp[i].id);
}
asyncLoop();
}
function onErrorParent(error) {
AlertService.error(error.data.message);
}
Context.getAlarmGroupChainById({
id: $stateParams.id
}, onSuccessParent, onErrorParent);
函数loadAll(){
var指数=0;
函数asyncLoop(chainId){
如果(索引>=虚拟机温度长度){
返回;
}
Context.getAlarmGroupById({
id:vm.temp[index].id
}、成功、失败);
函数onSuccess(数据、标题){
索引++;
异步循环();
}
函数onError(数据、标题){
索引++;
异步循环();
}
}
函数onSuccessParent(数据、标题){
vm.temp=数据;
var numberGroupChain=vm.temp.length;
对于(var i=0;i,这里是实现这一点的纯JavaScript方法,它工作得非常好。使用。执行如下操作:
var request1 = new Promise(function(resolve, reject) {
resolve('Success!');
});
request1.then(function(value) {
// make request2 here
});
检查。请检查不要在循环中调用服务。创建一个方法Car.getGroupIds(vm.temp),该方法返回一个可以筛选的列表。我创建了一个新函数,但问题仍然存在(var I=0;iI无法将您的代码实现到我的代码中:(函数必须获取一个参数,但我无法添加itloadData(vm.temp[I].id);id不需要传递,因为vm是全局变量。它不工作。它在进入onSuccess之前再次调用了2次。我加载了上次更新代码。您能帮我吗?Context.getAlarmGroupById在onSuccess方法之前调用了2次。
var request1 = new Promise(function(resolve, reject) {
resolve('Success!');
});
request1.then(function(value) {
// make request2 here
});