等待循环完成
Wait for loop to finish
有没有办法在运行下一个函数之前确保 for 循环已经完成?
我有一个场景,用户会看到一个用户列表,他们可以选择这些用户的 X 个,一旦他们为每个选定的用户按"完成",我就会调用 REST API 服务以获取有关所选用户的更多信息以添加到"用户"数组。
但是发生的事情是我在 for 循环之后放置的任何内容似乎在它完成之前就运行了,因此缺少用户
示例代码如下:
function doCreateStory() {
var users = [];
// Add logged in user as creator
users.push({
"id" : user_id,
"creator" : true
});
// Add all checked users
for (var i = 0, len = items.length; i < len; i++) {
if (items[i].properties.accessoryType == Ti.UI.LIST_ACCESSORY_TYPE_CHECKMARK) {
api.UserSearch({
"method" : "facebook",
"id" : items[i].properties.id
}, function(success, res, code) {
if (success == 1) {
users.push({
"id" : res.message._id,
"creator" : false
});
} else {
// Its broke..
}
});
}
}
// WANT TO DO SOMETHING HERE with 'users' array once loop has finished
}
api.用户搜索是一个异步函数。 您应该跟踪响应以及它们何时全部传入,然后处理返回的数据。
var requests = 0;
for (var i = 0, len = items.length; i < len; i++) {
if (items[i].properties.accessoryType == Ti.UI.LIST_ACCESSORY_TYPE_CHECKMARK) {
requests++;
api.UserSearch({
"method" : "facebook",
"id" : items[i].properties.id
}, function(success, res, code) {
requests--;
if (success == 1) {
users.push({
"id" : res.message._id,
"creator" : false
});
} else {
// Its broke..
}
if (requests == 0) done();
});
}
}
function done() {
// WANT TO DO SOMETHING HERE with 'users' array once loop has finished
}
这将递增计数器requests
当它们全部进入时,它应该调用函数done()
问题在于异步 AJAX 请求需要时间才能完成。处理此问题的一种方法是使用条件是成功处理程序:
var completedRequests = 0;
// Add all checked users
for (var i = 0, len = items.length; i < len; i++) {
if (items[i].properties.accessoryType == Ti.UI.LIST_ACCESSORY_TYPE_CHECKMARK) {
api.UserSearch({
"method" : "facebook",
"id" : items[i].properties.id
}, function(success, res, code) {
if (success == 1) {
completedRequests++;
users.push({
"id" : res.message._id,
"creator" : false
});
if (completedRequests === len){
//all ajax requests are finished
}
} else {
// Its broke..
}
});
}
}
相关文章:
- 如何让foreach循环等待$http.get完成后再继续
- 如何使for循环等待回调返回值
- foreach循环等待,直到每个步骤中的每个函数都完成
- Javascript 循环 - 等待值
- 如何使循环等待到ajax响应
- 让循环等待,直到上一次传递完成
- JavaScript循环等待一些函数返回,然后执行下一个循环
- Javascript 延迟函数,但让循环等待它
- 在JavaScript或Jquery中,让循环等待按钮按下后再继续
- 同步forEach循环(等待它结束)
- 如何在最里面的循环等待响应时延迟嵌套迭代
- 异步for循环:如何让for循环等待函数完成
- 我如何使for循环等待db承诺完成之前,它继续下一个迭代
- 如何强制循环等待,直到用户按下提交按钮
- 节点承诺循环等待结果
- 如何让for循环等待一个函数在javascript中执行
- 让循环等待ajax调用
- jQuery如何使for循环等待加载()完成
- 让 for 循环等待代码完成执行 javascript
- 如何使循环等待回调成功