同步休息调用Angular 1.6

时间:2018-04-24 08:45:13

标签: angularjs api

每当我为每个循环进行迭代进行休息调用时,迭代将在得到第一个响应之前完成.....你可以帮助我吗。

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'
    });
  };
};

获得输出
启动
启动
开始 结束
结束
结束

需要的输出:
启动
结束
启动
结束
启动

2 个答案:

答案 0 :(得分:1)

您的休息电话需要返回您可以观看的承诺。然后,您需要构建一个队列并同步注册它们。所以你有一个变量并链接你的单个调用。这可能看起来像这样

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()来捕获错误

答案 1 :(得分:0)

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

select p.* from pages as p where p.id = 21605
join products as pro on pro.page_id = p.id