Досинхронный цикл в узле JS - PullRequest
0 голосов
/ 01 мая 2018

Я нашел этот код ниже на GitHub , чтобы гарантировать, что n + 1-й элемент не будет обработан, пока не будет вызван обратный вызов процессора n-го элемента.

    /**
     * Process an array of data synchronously.
     *
     * @param data An array of data.
     * @param processData A function that processes an item of data.
     *                    Signature: function(item, i, callback), where {@code 
                                     item} is the i'th item,
     *                               {@code i} is the loop index value and 
                                     {@code calback} is the
     *                               parameterless function to call on 
                                     completion of processing an item.
     */
    function doSynchronousLoop(data, processData, done) {
    if (data.length > 0) {
        var loop = function(data, i, processData, done) {
            processData(data[i], i, function() {
                if (++i < data.length) {
                    loop(data, i, processData, done);
                } else {
                    done();
                }
            });
        };
        loop(data, 0, processData, done);
    } else {
        done();
    }
} 

Я сталкиваюсь с трудностями при вызове метода doSynchronousLoop () и написании методов: processData () и done ().

Пожалуйста, помогите мне понять фрагмент кода и как я могу написать свой код, который я хочу повторить?

1 Ответ

0 голосов
/ 01 мая 2018

Ну, вы можете вызвать свою функцию так:

let data = [1, 2, 3, 4];
let doSomething = function(item, index, next) {
 // item = 1, 2, 3, 4
 // when finishing, call next to trigger next function run
 // item value will be 2
 next();
}
let onDone = function() {
 // when all of them are done
}

doSynchronousLoop(data, doSomething, doDone);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...