【问题标题】:best way to pass parameter to call back function in nodejs将参数传递给nodejs中的回调函数的最佳方法
【发布时间】:2015-06-29 12:49:06
【问题描述】:

在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;
}

【问题讨论】:

  • 你怎么称呼这个?
  • 在这种特殊情况下,可以直接在回调函数中使用files
  • @thefourtheye:你能告诉我如何在回调函数中直接使用files吗?

标签: javascript node.js callback jquery-callback


【解决方案1】:

匿名函数只有在不断被重新创建和垃圾收集时才会影响性能。在这种情况下,将函数永久存储在内存中会使事情变得更快。

如果您没有每秒调用 deleteMedia 千次,您可能根本不会注意到性能下降。

但是,在您的情况下,您可以跳过整个 IIFE:

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

【讨论】:

  • 出于某种原因,当我说console.log(files); files 对我来说是未定义的。我不确定我是否遗漏了什么。
  • 您使用的 getFiles() 方法是否与您在问题中发布的方法不同?
  • 不。如果我调试,我确实会在 files 数组中看到值,但是当我进入 readdir() files 时,它是未定义的。
  • 你是正确的塞巴斯蒂安。我不确定我之前犯了什么错误,但现在我可以在readdir 中访问files。我真的很困惑 closure 概念不起作用。
【解决方案2】:

在这种情况下,您不需要执行括号中的块,它不是异步部分。虽然 readdir 是异步的,所以您可以回拨。

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);
        })
    }
}

【讨论】:

  • 我不能在fs.readdir(files[i], function (err, fls) {上使用files[]i,而是需要传递我要读取的文件夹的路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多