Angularjs 同步rest调用1.6
每当我迭代每个循环以进行rest调用时,迭代将在得到第一个响应之前完成。。。。。你能帮我一下吗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.
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,你可以考虑接受这个答案。