배열의 모든 항목에 대해 동적으로 함수를 실행해야하지만, Array.forEach
이 순서대로 실행되며 비동기로 실행해야합니다.Array.forEach를 Q.js와 비동기로 변환하는 방법은 무엇입니까?
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.
});
그러나 실행은 순서대로 항상 내가 병렬로 실행을해야합니다
items.forEach(function(item) {
doSomething(item);
});
나는이 시도합니다.
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
});
}
저를 도와주세요.
이 WebWorkers을 봐 도움이 되었기를 이야기하고, 자바 스크립트는 단일 스레드입니다. – OneOfOne
당신은 items.forEach를 setTimeout에 넣을 수 있습니다. setTimeout (function() {(코드가 여기에옵니다)}, 1) –
작업에 잘못된 도구를 사용하려고합니다. 약속은 동기 코드를 비동기 코드로 변환하는 도구가 아닙니다. 이들은 비동기 콜백 체인의 복잡성을 줄이는 수단입니다. –