有没有办法在运行下一个函数之前确保 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.UserSearch 是一个异步函数。您应该跟踪响应,当它们全部到达时,然后处理返回的数据。
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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)