2016-11-17 3 views
0

Я просто научиться использовать асинхронными, и я хочу сделать что-то вроде этого:использование async.series или водопад в цикле

var listOfArguments = []; 
async.waterfall([ 
getTheListOfArguments, 
function(callback) { 
    if (listOfArguments.lengh > 0) { 
    doSomething(listOfArguments.shift()); 
    } else { 
    callback(null, listOfArguments); 
    } 
} 
], function(err, res) { 
}) 

На самом деле я хочу getListOfArguments прочитать некоторый список и держать его в глобальном масштабе, то Я хочу перебрать функцию doSomething, чтобы получить каждый элемент массива в качестве ввода и перейти к следующему элементу только тогда, когда это делается с первым (отсюда и использование async!), Но это не похоже на Работа.

Может ли кто-нибудь мне помочь?

+0

И действительно ли «doSomething» возвращает обещание, так как это, безусловно, асинхронно, иначе не было бы этого необходимо? – adeneo

ответ

0

Хотя я не совсем уверен, что вы пытаетесь для того чтобы достигнуть, я считаю, что код, который нужно будет выглядеть примерно так

var listOfArguments = []; 

getTheListOfArguments(function(){ 
    // listOfArguments now contains some items, let's process it 
    if(listOfArguments.length) doSomething(); 
}); 

function doSomething() { 

    var item = listOfArguments.pop(); 

    // ... do your thing here 

    // if we still have some items in the listOfArguments array doSomething again 
    if(listOfArguments.length) return doSomething(); 

    // we are done, do something here 
    console.log('Done'); 
} 
0

попробовать что-то вроде этого.

var listOfArguments = []; 
var listOfTasks = []; 


getTheListOfArguments(function(){ 
    listOfArguments.forEach(function(arg){ 
    listOfTasks.push(doSomething.bind(null, arg)) 
}); 
}); 



async.series(listOfTasks, function(err, res) { 
}) 
Смежные вопросы