例如在这种情况下
我想调用url1,调用url2,调用url3; ,等待上次回拨后一步一步。
例如,这是我的源代码
var pram={};
var url = "http://myapiserver.com/api/test";
var client = Ti.Network.createHTTPClient({
onload : function(e) {
Ti.API.info("first call is success!!");
var url2 = "http://myapiserver.com/api/test2";
var client2 = Ti.Network.createHTTPClient({
onload : function(e) {
// call URL 3 here!!
Ti.API.info("second call is success!!");
},timeout : 3000
});
client2.open("GET", url);
client2.setRequestHeader('Content-type','charset=utf-8');
client2.send(pram2);
},
timeout : 3000
});
client.open("GET", url);
client.setRequestHeader('Content-type','charset=utf-8');
client.send(pram);
这个源代码是可以的,但是,如果你需要更多的步骤,嵌套结构将越来越深,难以维护。
有没有很好的方法来清理这种源代码?
答案 0 :(得分:2)
您应该利用CommonJS格式来获得一个接收参数和回调的http.js
文件。这应该避免一遍又一遍地重复创建HTTPClient
对象。
合金包含underscore.js开箱即用。如果您想同时运行多个异步调用,可以使用http://underscorejs.org/#after
之类的内容如果您可以进行后续调用,您可能希望以避免回调地狱的方式对代码进行组织。已经有很多关于解决这个问题的不同方法的文档。这是旧帖子的Sample。
答案 1 :(得分:0)
您可以尝试以下操作。它易读且易于维护。
var createClients = function (connections) {
var connection = connections.shift(),
url = connection['url'],
param = connection['param'],
client = Ti.Network.createHTTPClient({
onload: function (e) {
Ti.API.info("Call is success!");
connections[0] && createClients(connections)
},
timeout: 3000
});
client.open("GET", url);
client.setRequestHeader('Content-type','charset=utf-8');
client.send(param);
};
var connections = [
{'url': "http://myapiserver.com/api/test1", 'param': {}},
{'url': "http://myapiserver.com/api/test2", 'param': {}},
{'url': "http://myapiserver.com/api/test3", 'param': {}}
];
createClients(connections);
请注意,您最终会以空connections
此外,您可以使用connections
为每个连接获取HTTPClient
的内容,或者扩展(例如)每个连接的某些特定回调。
答案 2 :(得分:-1)
我猜您正在寻找清理代码的工具,this tool效果非常好。