Настройвам скрепер с помощта на NodeJS и ми е трудно да разбера правилния начин за предаване на данни, когато използвам async.parallel.
Ето пакетната функция, която получава списъка с пощенски кодове в масив вътре в обекта zip_results. Опитвам се да настроя масива asyncTasks като масив от функции, които да се изпълняват от async. Функцията, която искам да се извиква за всеки пощенски код, е Scraper.batchOne и искам да й предам пощенски код и версията на заданието. В момента функцията се извиква незабавно. Опитах се да обвия извикването към Scraper.batchOne
в анонимна функция, но това загуби обхвата на индексната променлива i
и винаги изпращаше недефинирани стойности.
Как мога да направя така, че функцията да бъде предадена на масива, заедно с някои параметри?
// zip_results: {job_version: int, zip_codes: []}
Scraper.batch = function (zip_results) {
//tasks - An array or object containing functions to run, each function
//is passed a callback(err, result) it must call on completion with an
//error err (which can be null) and an optional result value.
var asyncTasks = [], job_version = zip_results.job_version;
for (var i=0; i < zip_results['zip_codes'].length; i++) {
asyncTasks.push(Scraper.batchOne(zip_results['zip_codes'][i], job_version));
}
// Call async to run these tasks in parallel, with a max of 2 at a time
async.parallelLimit(asyncTasks, 2, function(err, data) { console.log(data); });
};