自己做event/callback可以吗? javascript
Is it possible to make event/callback by myself? javascript
我想在两个 http 调用完成后调用一个函数。
所以我需要等到两个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);
我不熟悉 Titanium,但我认为它支持 promises and you should try to use the Promise.all() 方法在两个调用都结束时执行某些操作。
无论哪种方式,您都可以自己将所有内容包装在 promise 中,例如:
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
})
如果您需要 polyfill Promises,因为默认情况下 Titanium 不支持它们(同样,我不是 Titanium 用户),npm 上有很多库可供您使用。
我想在两个 http 调用完成后调用一个函数。
所以我需要等到两个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);
我不熟悉 Titanium,但我认为它支持 promises and you should try to use the Promise.all() 方法在两个调用都结束时执行某些操作。
无论哪种方式,您都可以自己将所有内容包装在 promise 中,例如:
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
})
如果您需要 polyfill Promises,因为默认情况下 Titanium 不支持它们(同样,我不是 Titanium 用户),npm 上有很多库可供您使用。