有没有办法确保在运行下一个函数之前完成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
}
Run Code Online (Sandbox Code Playgroud)
jer*_*emy 15
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
}
Run Code Online (Sandbox Code Playgroud)
这将增加一个计数器requests,当它们全部进入时,它应该调用该函数done()
| 归档时间: |
|
| 查看次数: |
24894 次 |
| 最近记录: |