2015-04-07 2 views
0

Мне нужно написать фрагмент кода в node.js, где мне нужно управлять асинхронным потоком с помощью async.js. Существует функция в async.js под названием async.waterfall, которая дает возможность передать некоторое значение следующей выполняемой функции. Моя проблема заключается в том, что я должен запустить async.eachSeries для управления потоком по массиву, но я не могу найти какой-либо вариант для передачи некоторого значения, например, водопада. Есть ли?async.waterfall как альтернатива для async.eachSeries

ответ

1

async.eachSeries() не имеет возможности передать значение, но вы можете использовать закрытие для сохранения значения для следующей итерации. Например:

var async = require('async'); 

(function() { 
    var lastValue = 1; 

    async.eachSeries([1, 2, 3, 4, 5], function (item, eachCb) { 
    console.log('item ' + item + ', last value: ' + lastValue); 
    lastValue = lastValue + item; 
    eachCb(null); 
    }, function (err) { 
    console.log('done:' + lastValue); 
    }); 
})(); 

Выход будет:

item 1, last value: 1 
item 2, last value: 2 
item 3, last value: 4 
item 4, last value: 7 
item 5, last value: 11 
done: 16 

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

+0

На самом деле я хотел избежать глобального состояния. Есть ли какой-либо путь без глобальной переменной состояния? – taufique

+0

если вызов библиотеки не разрешает, я не вижу, как использовать закрытие. В этом случае он глобальный, но внутри этого модуля. Вы можете даже обернуть вокруг функцию, чтобы сделать ее просто переменной функции. Я изменю свой ответ. – Ben

Смежные вопросы