2016-05-03 2 views
0

Мне нужно сделать несколько показаний HTTP, и мне нужно ждать ответа. Но HTTP-асинхронный. Тогда я не знаю, как это сделать.Мне нужно дождаться ответа HTTP

мой код:

var clientelee = Ti.Network.createHTTPClient({ 
    // function called when the response data is available 
    onload : function(e) { 
     Ti.API.info("*******  Recibido: " + this.responseText); 
    }, 
    // function called when an error occurs, including a timeout 
    onerror : function(e) { 
     Ti.API.debug("****** ERROR *********"+e.error); 
    }, 
    onreadystatechange: function(e){ 
     Ti.API.info("******* STATUS *********"+e.readyState); 
    }, 
    timeout : 3000 // in milliseconds 
}); 

function LeeDatos(){ 
    url = "http://www.hola.com/read/"+leoSerie; 
    // Prepare the connection. 
    clientelee.open("GET", url); 
    // Send the request. 
    clientelee.send();  
} 


for (i=0;i<NRegistros;i++){ 
    TablaSerieTermostatos[i]=rows.field(0); 
    leoSerie=rows.field(0); 
    LeeDatos(); 
    ...... 
} 

Любое предложение ?? Спасибо

+0

вы используете NodeJS? Если это так, я считаю, что вам нужна библиотека типа [async] (https://github.com/caolan/async), чтобы ждать завершения нескольких вызовов, а затем запустить обратный вызов –

+1

Возможный дубликат [Как вернуть ответ от асинхронного вызова?] (http://stackoverflow.com/questions/14220321/how-do-return-the-response-from-an-asynchronous-call) – Idos

ответ

2

В ответ на вызов вы могли бы не просто передать функцию, а когда она загрузится, продолжайте с кодом.

onload : function(e) { 
    Ti.API.info("*******  Recibido: " + this.responseText); 
    LoadedData(); 
}, 

function LoadedData() { 
    // Data loaded from ASYNC Carry on... 
} 

или вы могли бы сделать это таким образом:

function waitForResponse(type, url, callback) { 

    var client = Ti.Network.createHTTPClient({ 
     // function called when the response data is available 
     onload : function(e) { 
      Ti.API.info("*******  Recibido: " + this.responseText); 
      callback(); 
     }, 
     // function called when an error occurs, including a timeout 
     onerror : function(e) { 
      Ti.API.debug("****** ERROR *********"+e.error); 
     }, 
     onreadystatechange: function(e){ 
      Ti.API.info("******* STATUS *********"+e.readyState); 
     }, 
     timeout : 3000 // in milliseconds 
    }); 

    client.open(type, url); 

    client.send(); 
} 

function LeeDatos(){ 
    url = "http://www.hola.com/read/"+leoSerie; 

    waitForResponse("GET", url, function() { 
     // Data Ready... 
    }); 
} 

for (i=0;i<NRegistros;i++){ 
    TablaSerieTermostatos[i]=rows.field(0); 
    leoSerie=rows.field(0); 
    LeeDatos(); 
    ...... 
} 
+0

Спасибо, Ридделл, он отлично работает –

+0

Ваше приветствие , Рад, что это помогло мне быстро сбить дополнительный код в VS Code, так что рад, что он работал без проблем. – Riddell

Смежные вопросы