Вот программа, с которой я пытаюсь обернуть голову, как правильно напечатать элементы в q, как только все результаты будут нажаты?
function asyncAdd(a,b,callback) {
setTimeout(function() {
return callback(a+b);
},0);
}
var q = [];
var ctr = 0;
for (var i=0; i<9; i++) {
(function(i) {
var res = asyncAdd(i, 0, printRes);
q.push(res);
})(i);
}
function done(q) {
console.log("done"+q);
}
function printRes(res) {
return res;
}
Пожалуйста, посмотрите мою версию
function asyncAdd(a,b,callback) {
callback(a+b);
}
var q = [];
var ctr = 0;
var max = 9;
for (var i = 0; i < max; i++) {
asyncAdd(i, 0, printRes);
}
function done(q) {
console.log("done " + q);
}
function printRes(res) {
q.push(res);
if (q.length === max)
done(q);
}
Promise.all
который будет ждать, пока все обещания не будут выполнены. Поскольку библиотеки A + Promise совместимы друг с другом, это можно использовать.