2015-06-29 6 views
0

Каков наилучший способ передать параметр функции обратного вызова в nodejs? Я отвечаю на анонимную функцию, но было сказано, что анонимный fuction снижает производительность.лучший способ передать параметр функции обратного вызова в nodejs

У меня есть функция, которая вызывает другую функцию (getFiles) для получения списка файлов, а затем я читаю файлы в папке и сравнивает, соответствуют ли файлы в папке файлам, возвращаемым функцией getFiles.

function deleteMedia(req) { 
    var files = getFiles(); 
    (function (parms) { //used to pass files 
     fs.readdir(folderPath, function (err, fls) { 
      console.log(parms); 
     }) 
    })(files); 
} 

function getFiles(){ 
    var arr =[]; 
    arr.push('12.gif'); 
    arr.push('13.gif'); 
    arr.push('14.gif'); 
    return arr; 
} 
+0

как вы это называете? – dm03514

+0

В этом конкретном случае вы можете напрямую использовать 'файлы' в функции обратного вызова – thefourtheye

+0

@thefourtheye: Не могли бы вы рассказать мне, как я могу напрямую использовать' файлы' в функции обратного вызова? – SharpCoder

ответ

2

Анонимные функции влияют только на производительность, если они постоянно воссоздается и мусора. В этом случае сохранение функции в памяти будет происходить быстрее.

Если вы не вызываете deleteMedia тысячу раз в секунду, вы можете вообще не заметить снижение производительности.

Однако в вашем случае вы можете просто пропустить весь IIFE:

function deleteMedia(req) { 
    var files = getFiles(); 
    fs.readdir(folderPath, function (err, fls) { 
     console.log(files); 
    }); 
} 
+0

по какой-то причине, когда я говорю 'console.log (файлы); файлы 'для меня не определены. Я не уверен, что я что-то пропустил. – SharpCoder

+0

Используете ли вы другой метод getFiles(), отличный от того, который вы опубликовали в своем вопросе? –

+0

Нет. Если я отлаживаю, я вижу значения в массиве файлов, но когда я вхожу в 'readdir(), файлы' появляются как неопределенные. – SharpCoder

0

В этом случае вам не нужно выполнять блок в скобках, это не асинхронная часть. Чтение является асинхронным, так что ваш звонок обратно.

function deleteMedia(req) { 
    var files = getFiles(); 
    for (var i in files){ 
     fs.readdir(files[i], function (err, fls) { 
      // do something with output asynchronously 
      console.log(fls); 
     }) 
    } 
} 
+0

Зачем вам звонить readdir в список имен файлов? –

+0

Я не могу использовать 'files [] i' on'fs.readdir (файлы [i], function (err, fls) {', вместо этого мне нужно пройти путь к папке, которую я хочу прочитать. – SharpCoder

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