我在异步http.get上遇到了问题。在循环中,我有http.get,我认为 - 在这种情况下 - 更好的是同步方法。你觉得怎么样?如何解决这个问题?
我使用离子2。
下面是我的代码:
for (var key in this.beacons) {
alert('beacon id: ' + this.beacons[key]['url']);
this.http.get('http://website.com/app.php?id=' + this.beacons[key]['url']).map(res => res.json()).subscribe(
data => {
this.json = data.config;
alert('alert json, id: ' + this.beacons[key]['url']);
}, error => {
this.jsonError = true;
});
if (this.json['id']) {
alert('alert end, id: ' + this.beacons[key]['url']);
break;
}
}
一开始我收到大约 10 个警报"信标 ID",最后我收到"警报 json"。
我想要实现的目标:
- 在数组中,我有大约 10 个项目
- 每个循环都使用信标的 url 向我的服务器发出请求
- 只有少数信标获得阵列响应
- 当我收到带有配置数组的第一个 JSON 响应时,我想打破循环
问题是答案来得很晚,我无法保持中断循环等。
如果你想让你的ajax调用被同步,我认为你可以实现一个递归方法。因此,在第一次 ajax 调用之后,如果您没有得到所需的响应,则可以使用不同的 url 再次调用该方法
。例:
let arr = [];
for(var key in this.beacons){
arr.push(key);
}
function callAjax(index){
if(index >= arr.length){
return;
}else{
//YOUR AJAX CALL...
data => {
this.json = data.config;
}, error => {callAjax(index + 1)}
}
}
对于第一次调用
callAjax(0);