2017-01-11 13 views
0

У меня проблема с асинхронным http.get. В цикле у меня есть http.get, и я думаю - в этом случае - лучше будет синхронный метод. Как вы думаете? Как я могу решить эту проблему?синхронный http.get угловой 2, ионный 2

Я использую Ионные 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 предупреждений «маяком идентификатор», и в конце концов я получаю «предупреждение» JSON.

То, что я хочу добиться:

  1. В массиве У меня есть около 10 пунктов
  2. Каждой петли сделать запрос к серверу с URL маяка
  3. только несколько маяков получает массив в ответ
  4. Когда Я получаю первый ответ JSON с конфигурационным массивом, я хочу разбить петлю

Проблема в том, что ответ приходит поздно nd Я не могу поддерживать цикл прерывания и т. д.

ответ

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); 
Смежные вопросы