Как напечатать элементы в q, асинхронный способ

0

Вот программа, с которой я пытаюсь обернуть голову, как правильно напечатать элементы в 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;
}
  • 0
    Вы делаете это правильно, когда каждое отдельное нажатие является отдельной асинхронной операцией, и каждая операция будет напечатана после ее завершения. Если вы хотите, чтобы он печатался только после того, как все асинхронные операции завершены, вам нужно знать, сколько операций будет выполнено, а затем вести подсчет того, сколько из них завершено ... когда эти числа совпадают, вы знаете, что все асинхронные операции выполнены
  • 0
    @Literphor Спецификация Promise также имеет хороший Promise.all который будет ждать, пока все обещания не будут выполнены. Поскольку библиотеки A + Promise совместимы друг с другом, это можно использовать.
Теги:
asynchronous

1 ответ

0

Пожалуйста, посмотрите мою версию

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);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню