我想在两次http调用完成后调用一个函数。
所以我需要等到两个http呼叫结束。
这段代码是钛,但结构对于类似javascript的langs来说很常见。
我现在制作了一些代码,但是我不知道如何处理原始回调....
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);
答案 0 :(得分:1)
我不熟悉Titanium,但我认为它支持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
})
如果你需要填充Promise,因为默认情况下Titanium不支持它(再次,我不是Titanium用户),你可以使用npm上的很多库。