2014-01-31 2 views
0

Я использую async.js сделать следующее:Как абстрагировать функцию как параметр в JS?

var async = require('async'); 
var i = 0; 
var continueWhilst = true; 
async.whilst(
    function test() { return continueWhilst; }, 
    function doThisEveryTime(next) { 
    i++; 
    if (i===5) { 
     continueWhilst = false; 
    } 
    console.log(i); 
    next(); 
    }, 
    function (err) { 
    // Done 
    } 
); 

выше работал. This is the documentation for async.whilst.

Теперь я хотел абстрагироваться от функции doThisEveryTime, поэтому код очень читаем. Я пробовал сделать это:

var i = 0; 
var continueWhilst = true; 
async.whilst(
    function test() { return continueWhilst; }, 
    doThisEveryTime2(next), 
    function (err) { 
    // Done 
    } 
); 

function doThisEveryTime2(next) { 
    i++; 
    if (i===5) { 
    continueWhilst = false; 
    } 
    console.log(i); 
    next(); 
} 

Но это не сработало. Сообщение об ошибке выглядит следующим образом:

doThisEveryTime2(next), 
      ^
ReferenceError: next is not defined 

Как это сделать правильно?

ответ

2

Вам нужно только передать функции doThisEveryTime, не называть его - нет скобки, нет next:

var i = 0; 
var continueWhilst = true; 
async.whilst(
    function test() { return continueWhilst; }, 
    doThisEveryTime2, 
    function (err) { 
    // Done 
    } 
); 

не заметить также, что вы скорее должны использовать timesSeries function за то, что вы делаете - с дополнительным преимуществом, что i является функциональным аргументом функции doThisEveryTime, а не глобальной переменной.

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