Angularjs 同步rest调用1.6

Angularjs 同步rest调用1.6,angularjs,api,Angularjs,Api,每当我迭代每个循环以进行rest调用时,迭代将在得到第一个响应之前完成。。。。。你能帮我一下吗 var list = [1,2,3]; $scope.fun1 = function(list) { forEach(list,function(value,key)) { console.log("Start"); restCall(url,function(response) { //each rest request will tack 30sec.

每当我迭代每个循环以进行rest调用时,迭代将在得到第一个响应之前完成。。。。。你能帮我一下吗

var list = [1,2,3];
$scope.fun1 = function(list) {    
  forEach(list,function(value,key)) {
    console.log("Start");
    restCall(url,function(response) {   //each rest request will tack 30sec.
      console.log(response); // response = 'end'
    });
  };
};
获取输出:
开始
开始
开始 结束
结束
结束

重新需要的输出:
开始
结束
开始
结束
开始

结束

我不确定您想要实现什么,但为了获得所需的输出,我建议使用递归

function callApi(list){
  if(!list.length){
    return;
  }
  console.log('start');
  restApi(url, function(){
    console.log('end');
    callApi(list.splice(1));
  });
}

您的rest通话需要回复您可以遵守的承诺。然后,您需要构建一个队列并同步注册它们。因此,您有一个变量并链接您的单个调用。这可能看起来像这样

var list = [1,2,3];
var queue = new Promise(resolve => resolve());
$scope.fun1 = function(list) {
    forEach(list, function(value,key)) {
        console.log("Start");
        queue = queue.then(() => {
            return restCall(url,function(response) {   //each rest request will tack 30sec.
                console.log(response); // response = 'end'
            });
        });
    };
};

如果要在一个请求失败的情况下继续队列,则需要添加.catch()以捕获错误

回调,并且根据定义,承诺是异步的。你想要实现什么?需要同步吗?是的,我希望这是同步的。谢谢你的建议,但是我想在没有递归的情况下实现这一点。@ RaviPatidar,你可以考虑接受这个答案。