等待循环结束并执行第二个函数
Wait for loop ending end execute second func
我有两个函数:
function parseFriends_new(range) {
var xml = window.XMLHttpRequest ? new XMLHttpRequest : new ActiveXObject("Microsoft.XMLHTTP");
var params = "gwt.requested=" + gwtHash + "&refId=search-d-" + Date.now() + "&d.sq=&d.o=" + range + "&d.d=d.in";
xml.open("POST", "/dk?cmd=FriendsSearch", true);
xml.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xml.setRequestHeader('TKN', TKN);
xml.onreadystatechange = function() {
if (4 == xml.readyState && 200 == xml.status) {
}
}
xml.send(params);
}
function postNoteAndTag(friendsList, repostId, trashText) {...}
我需要在parseFriends_new
之后执行postNoteAndTag
for (var i = 0, range = 0; i < 20; i++, range += 10)
{
parseFriends_new(range);
}
//wait for loop and then execute next code
postNoteAndTag(friendsList, repostId, trashText);
如何做到这一点?
由于parseFriends_new
是异步的,您可能需要对其进行修改,使其与回调一起工作:
function parseFriends_new(range, done) {
var xml = window.XMLHttpRequest ? new XMLHttpRequest : new ActiveXObject("Microsoft.XMLHTTP");
var params = "gwt.requested=" + gwtHash + "&refId=search-d-" + Date.now() + "&d.sq=&d.o=" + range + "&d.d=d.in";
xml.open("POST", "/dk?cmd=FriendsSearch", true);
xml.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xml.setRequestHeader('TKN', TKN);
xml.onreadystatechange = function() {
if (4 == xml.readyState && 200 == xml.status) {
}
// The AJAX request finished => we can invoke the callback.
// you could also pass it some result if needed
done();
}
xml.send(params);
}
然后:
// We've got 20 AJAX requests to make at total
var count = 20;
for (var i = 0, range = 0; i < count; i++, range += 10) {
parseFriends_new(range, function() {
--count;
if (count <= 0) {
// All AJAX requests have finished executing
// you can now do whatever you intended to do:
postNoteAndTag(friendsList, repostId, trashText);
}
});
}
不过,请记住,这是一种绝对不好的做法,在一个突发事件中用这么多请求来打击你的网络服务器。这对服务器、客户端和TCP/IP都不好。
一个更好的解决方案是向服务器发送一个带有所有有效负载的AJAX请求。发送一个大型AJAX请求比发送多个小型AJAX请求效率高得多。当然,您可能需要调整服务器端脚本,以便能够处理请求。
相关文章:
- 在第二个函数中检测第一个函数是否返回值
- AngularJS:承诺链不延迟超过第二个函数
- 角度$scope首先设置值而不是服务,然后第二个函数调用一切正常
- 第二个函数忘记了所选值
- 如何将第二个函数绑定到 jQuery 验证提交处理程序
- 当第一个函数完成没有回调参数时执行第二个函数
- 为什么 AJAX 对第一个函数的响应“_blank”有效,但对第二个函数无效
- 为什么第二个函数不运行,在这个 javascript 的异步示例中
- 为什么第二个函数参数在注释块中?只是好奇
- 如何在函数完成后使用 jQuery 进行动画处理 - 让第二个函数等待
- 在调用第二个函数后启用字段函数触发器
- 在第二个函数上获得错误的输出
- 角度显示/隐藏只处理第二个函数调用,应用/摘要问题
- 如何在第一个函数完全执行后调用第二个函数
- 从nodejs中的第二个函数中获取结果
- 第二个函数onclick没有被调用
- 我的第二个函数不是删除父元素
- 回调未运行第二个函数
- 如何才能只触发第二个函数中的第一个函数
- 我该如何调用第二个函数来操作点击