2013-07-22 2 views
4

Мне нужно пропустить функции или прорыв в async.series, и мне было интересно, как я должен это делать. У меня есть массив элементов, которые мне нужно перебирать. Я помещаю этот список в функцию async.each. Каждый элемент массива затем перебирает список функций, необходимых перед тем, как двигаться дальше, в серии (поскольку информация из одного из них требуется в следующем). Но в некоторых случаях мне нужно только пройти первую функцию, тогда, если условие не выполняется (например, это категория, которую мы не используем), а затем обратный вызов в цикле async.each для следующего элемента. Вот пример моего кода:Как выйти из серии async внутри цикла async.each - node.js

exports.process_items = function(req, res, next){ 
var user = res.locals.user; 
var system = res.locals.system; 
var likes = JSON.parse(res.locals.likes); 
var thecat; 

//process each item 
async.each(items, function(item, callback){ 
    //with each item, run a series of functions on it... 
    thecat = item.category; 

    async.series([ 
    //Get the category based on the ID from the DB... 
    function(callback) { 
     //do stuff 
     callback(); 
    }, 

    //before running other functions, is it an approved category? 
    //if it is not an approved category, SKIP THE OTHER FUNCTIONS IN THE LIST (but how?) 
    function(callback) { 
     //do stuff 
     callback(); 
    }, 

    //some other functionality run on that item, 
    function(callback){ 
     //do stuff 
     callback(): 
    } 


    ], function(err) { 
    if (err) return next(err); 
    console.log("done with series of functions, next item in the list please"); 
}); 

//for each like callback... 
callback(); 

}, function(err){ 
    //no errors 
    }); 
} 

ответ

3

Поместить ярлыки выхода в верхней части зависимых функций. Например:

async.series([ 
    //Get the category based on the ID from the DB... 
    function(callback) { 
     //do stuff 
     callback(); 
    }, 

    //before running other functions, is it an approved category? 
    //if it is not an approved category, SKIP THE OTHER FUNCTIONS IN THE LIST (but how?) 
    function(callback, results) { 
     if (results[0] is not an approved category) return callback(); 
     //do stuff 
     callback(); 
    }, 
+2

Но это только выйдет из этой функции? Или попросит его вернуть конец обратного вызова в серию? Я хочу закончить серию, не выполняя все другие функции в серии, и снова вернуться к async.each. –

+0

Это не конец серии, но он останавливает любую работу и отправляет управление обратно в async.each. Вам нужен один из них в начале любой функции, которую вы не хотите запускать, если результат не одобрен. Я также заметил, что вам нужен звонок для обратного вызова сразу после строки console.log. Легко справиться со всеми функциями обратного вызова, плавающими вокруг. – Allan

+0

Это сработало, спасибо Аллан! –

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