Узлы: параллельный запрос, последовательный ответ - PullRequest
0 голосов
/ 21 мая 2011

Я сделал Узлы: Как написать высокопроизводительный асинхронный цикл для stormjs, вы можете проверить stormjs serial loop demo

но есть проблема с параллельным циклом, например, у нас есть функция requestContext(index, callback(err, context)), которая удаленно получает контекст 'http://host/post/{index}',, и нам нужно получить контекст [0-99] и вставить контекст в массив в следующем порядке: [context0...context99]

но очевидно, что этот вывод не может работать stormjs параллельный цикл

Я все еще хочу знать, как узлы выполняют эту задачу, но вы должны делать эти запросы параллельными, а не 1 на 1, это должен быть параллельный запрос и последовательный push.

1 Ответ

1 голос
/ 21 мая 2011
var counter = 0;
// create an array with numbers 0 to 99.

_.range(0,100).forEach(function(key, value, arr) {
    // for each of them request context
    requestContext(key, function(err, context) {
        // add the context to the array under the correct key
        if (!err) {
            arr[key] = context;
        }
        // increment counter, if all have finished then fire finished.
        if (++counter === 100) {
            finished(arr);
        }
    });
});

function finished(results) {
    // do stuff
}

Буря не требуется. Если вам нужна библиотека управления исполнением / потоком, я бы порекомендовал Futures , потому что она не компилирует ваш код и «скрывает магию».

Ранее вы просматривали каждый из них и выполняли их в последовательном порядке, помещая их в массив по порядку.

На этот раз вы выполняете их все параллельно и приказываете каждому назначить правильный упорядоченный ключ в массиве их собственному значению.

_.range Создает массив, содержащий значения от 0 до 99.

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