【问题标题】:synchronous http.get angular 2, ionic 2同步 http.get 角度 2,离子 2
【发布时间】:2018-04-12 20:56:34
【问题描述】:

我遇到了异步 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 个警报“信标 ID”,最后我收到“警报 json”。

我想要达到的目标:

  1. 在数组中我有大约 10 个项目
  2. 每个循环都使用信标的 url 向我的服务器发出请求
  3. 只有少数信标获得数组响应
  4. 当我收到第一个带有配置数组的 JSON 响应时,我想打破循环

问题是答案来晚了,我无法保持中断循环等。

【问题讨论】:

    标签: angular ionic2


    【解决方案1】:

    如果您希望同步您的 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);
    

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多