我需要动态地为数组中的所有项执行一个函数,但是 Array.forEach
按顺序执行,我需要异步执行。
items.forEach(function(item) {
doSomething(item);
});
我尝试了这个:
var promises = [];
items.forEach(function(item) {
var promise = function() {
return Q.fcall(function() {
doSomething(item);
});
};
promises.push(promise());
});
Q.all(promises).then(function () {
otherFunction(datacontext.mainList); //use datacontext.mainList filled.
});
但是执行总是按顺序进行,我需要并行执行。
doSomething(item)
方法:
function doSomething(item) {
var children = getChildren(item); //get data from local with manager.executeQueryLocally
var total = getTotal(children); //simple calculations
datacontext.mainList.push({
name: item.firstName() + ' ' + item.lastName(),
total: total
});
}
请帮助我。
var promises = items.map(function() {/*创建promise*/ return promise;});
- megawacdoSomething
不会在一个事件中完成。如果它在一个事件中完成,它将始终以“串行”的方式执行,但不一定按顺序执行。如果doSomething
返回一个Promise或有一个回调,并且不会在单个事件中完成,那么就会打开“并行”的可能性,其中多个作业的事件会交错。无论哪种方式,我都可以提供提示。 - Kris KowaldoSomething
非常懒惰,我需要在“并行”中执行该方法。如何并行执行此方法? - kuskunko