同步http.get angular 2,ionic 2

时间:2017-01-11 13:44:38

标签: angular ionic2

我遇到异步http.get的问题。在循环中我有http.get,我认为 - 在这种情况下 - 更好的是同步方法。你怎么看?我该如何解决这个问题?

我使用Ionic 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个警报“beacon id”,最后我得到“警告json”。

我想要实现的目标:

  1. 在数组中我有大约10个项目
  2. 每个循环都使用beacon的url
  3. 向我的服务器发出请求
  4. 只有少数信标获得响应
  5. 当我获得配置数组的第一个JSON响应时,我想打破循环
  6. 问题是答案来得晚,我不能保持中断循环等。

1 个答案:

答案 0 :(得分:0)

如果你想要同步你的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);