javascript - 向回调函数添加额外的参数

标签 javascript node.js callback synchronous

我正在 Node.js 中构建一个系统,该系统应该在文件夹数组中查找所有文件,统计它们,然后使用该信息做一些额外的工作。

我正在使用 fs.readdir() 从每个文件夹同步获取所有文件。我的代码如下所示:

for(i=0,max=paths.length; i<max; i++) {
    var path = paths.pop();
    console.log("READING PATH: " + path);
    fs.readdir(path, function(err, files) { handleDir(err, files, path); });
}

问题是,根据 readdir() 的执行速度,handleDir() 得到了错误的路径。发生这种情况是因为在回调运行时,下一个循环已经开始 - 这意味着路径变量已更改。

因此,我需要做的是以某种方式将该路径变量锁定到它的特定回调函数。我想不出任何好的方法 - 谁有一些想法?

最佳答案

没有 block 作用域,所以使用作用域函数。

for(var i=0, path, max=paths.length; i<max; i++) {
    path = paths.pop();
    console.log("READING PATH: " + path);
    handlePath( path );
}
function handlePath ( path ) {
    fs.readdir(path, onPathRead);
    function onPathRead (err, files) {
        handleDir(err, files, path);
    }
}

关于javascript - 向回调函数添加额外的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5997296/

相关文章:

javascript - 当没有互联网连接时,错误回调不会触发

javascript - 如何在 GraphQL 中创建自定义对象列表

javascript - 将月份数字转换为名称

angularjs - Mongoose 架构中具有默认值的属性不会持久存在

html - 当 favicon 请求得到正常的 html 响应时会发生什么?

wpf mvvm threading.Timer 和 TimerCallback 问题

python - 当一个键过期时,set_response_callback 不调用回调方法

javascript - 通过键比较将一个对象复制到另一个对象

javascript - 未处理的 Promise 拒绝 : No provider for AuthHttp! ;区域: angular2-jwt 中的 Angular

node.js - 提取音频文件元数据,而无需使用fileStream在nodejs中上传