2017-02-06 11 views
0

2つのhttp呼び出しが終了した後に関数を呼びたいと思います。イベント/コールバックを自分で作ることはできますか? javascript

したがって、2回のhttpコールが終了するまで待つ必要があります。

このコードはチタンですが、構造はjavascriptのような言語では一般的です。

私は、しかし、私は、元のコールバックを処理する方法がわからない,,,今のいくつかのコードを作った....

var flg1 = false; 
var flg2 = false; 

function(callback if (flg1 && flg2)){console.log"Now two flg is changedd!!!";} 


// first http call 
var pram={}; 
var url = "http://myapiserver.com/api/test"; 
var client = Ti.Network.createHTTPClient({ 
    onload : function(e) { 
     Ti.API.info("first call is success!!"); 
      flg1 = true; //change flg to true 
      }); 
    }, 
    timeout : 3000 
}); 

client.open("GET", url); 
client.setRequestHeader('Content-type','charset=utf-8'); 
client.send(pram); 


// second http call 
var pram2={}; 
var url2 = "http://myapiserver.com/api/test2"; 
var client2 = Ti.Network.createHTTPClient({ 
    onload : function(e) { 
     Ti.API.info("second call is success!!"); 
        flg2 = true; //change flg to true 
      }); 
    }, 
    timeout : 3000 
}); 

client2.open("GET", url); 
client2.setRequestHeader('Content-type','charset=utf-8'); 
client2.send(pram2); 

答えて

1

私はチタンに慣れていないんだけど、私はそれがpromises、あなたをサポートして考えます両方の呼び出しが終了したときに何かを実行するには、Promise.all()メソッドを使用するようにしてください。

いずれかの方法で、あなたのような、約束で自分をすべてをラップすることができます:

var p1 = new Promise(function (resolve, reject) { 
    var pram={}; 
    var url = "http://myapiserver.com/api/test"; 
    var client = Ti.Network.createHTTPClient({ 
     onload : function(e) { 
      // extract data from e, 
      data = e 
      resolve(data) 
     }, 
     onerror: function (error) { 
      reject(error) 
     }, 
     timeout : 3000 
    }); 

    client.open("GET", url); 
    client.setRequestHeader('Content-type','charset=utf-8'); 
    client.send(pram); 
}) 


// second http call 
var p2 = new Promise(function (resolve, reject) { 
    var pram2={}; 
    var url2 = "http://myapiserver.com/api/test2"; 
    var client2 = Ti.Network.createHTTPClient({ 
     onload : function(e) { 
      // extract data from e, 
      data = e 
      resolve(data) 
     }, 
     onerror: function (error) { 
      reject(error) 
     }, 
     timeout : 3000 
    }); 

    client2.open("GET", url); 
    client2.setRequestHeader('Content-type','charset=utf-8'); 
    client2.send(pram2); 
} 

Promise.all([p1, p2]).then(function (dataComingFromP1, dataComingFromP2) { 
    // magik 
}) 

あなたは彼らがデフォルトでチタンによってサポートされていないとの約束をポリフィルする必要がある場合は(再び、私はチタンではありませんよユーザー)、npmにはたくさんの図書館があります。

+0

ありがとうございます。何らかの形でp1のデータとp2のデータがdataComingFromP1に追加されます(dataComingFromP2は未定義です)。しかし、私は別の問題だと思う。あなたの提案に感謝します。 – whitebear

+0

例を修正しました。第2の約束では「解決」への呼びかけはなかった。とにかく、マニュアルを見て、約束の仕組みを理解してください! – motanelu

関連する問題