Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在第一个请求完成后调用第二个请求_Javascript_Angularjs - Fatal编程技术网

Javascript 在第一个请求完成后调用第二个请求

Javascript 在第一个请求完成后调用第二个请求,javascript,angularjs,Javascript,Angularjs,我有一个关于请求的问题。我发出第一个请求,然后我假设第一个onSuccess方法将运行,但程序立即发出第二个请求。我如何处理它上下文。getAlarmGroupById立即被调用2次。 我的代码: 函数loadAll(){ Context.getAlarmGroupChainById({ id:$stateParams.id }、成功、失败); 函数onSuccess(数据、标题){ vm.temp=数据; var numberGroupChain=vm.temp.length; 对于(变量i=

我有一个关于请求的问题。我发出第一个请求,然后我假设第一个onSuccess方法将运行,但程序立即发出第二个请求。我如何处理它<代码>上下文。getAlarmGroupById立即被调用2次。 我的代码:

函数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
});