我正在研究一个角度的应用程序,并遇到问题。我对JS非常陌生,对异步编程非常陌生,所以我猜测我错过了一些明显的东西。For循环异步
问题的要点是我有一个for循环,它构建一个数组。然后,只要for循环完成它的业务,我就需要加入该数组。通常情况下,这将是一个没有道理的,但显然在角度上for循环异步执行。我需要在 for循环退出后强制我的数组连接发生。
if(!data.results[i].is_deleted) {
var objectsOnCurrentPermission = new Array();
if(data.results[i].objects) {
for(var j = 0; j < data.results[i].objects.length; j++) {
var currentObjectId = data.results[i].objects[j].object_id;
var currentObjectName;
var objectData = Object.get({id: currentObjectId}, function(objectData) {
objectsOnCurrentPermission.push(objectData.name);
console.log('in loop in get fn');
console.log(objectsOnCurrentPermission);
});
}
console.log('after loop');
console.log(objectsOnCurrentPermission);
var listOfObjectsOnCurrentPermission = objectsOnCurrentPermission.join(', ');
console.log('str after assignment');
console.log(listOfObjectsOnCurrentPermission);
data.results[i]['objects_list'] = listOfObjectsOnCurrentPermission;
}
令我惊讶的是,当我检查输出我看到(我加了'<的提高可读性)
after loop permissions.js:246
>Array[1]
permissions.js:247
str after assignment permissions.js:249
permissions.js:250
in loop in fn permissions.js:242
>Array[1]
你可以看到,执行第一循环后输出。从我所知道的,第一次输出数组[1]时,数组实际上并没有被填充 - 事实上,chrome只是填充它。在表示“str分配后”的行之后的空行是我试图输出连接的那个空行,这显然不起作用。然后最后执行循环中的代码。正如我所提到的,我需要确保在for循环完成填充数组之后发生数组连接。
你看过Angular的$ q吗? (至少对我来说)这已经优雅地解决了我的异步问题。 –