【问题标题】:fs.rename callback function not executing in nodejs filesystemfs.rename 回调函数未在 nodejs 文件系统中执行
【发布时间】:2019-04-03 05:11:36
【问题描述】:

如果目录名称中包含空格,我将尝试重命名目录。 它重命名正确,但重命名后定义的回调函数从未调用过。

下面是我的递归函数,其中 fs 代表 文件系统complete-directory-tree

function renameDir(dirs){
    dirs.forEach(function(e){

        if(e.name.match(/\s+/g)){
            var cname = e.name.replace(/\s+/g,'_');
            var cpath = e.path.replace(e.name,cname);
            fs.rename(e.path,cpath,function(err,data){
                if(err) console.log(err)
                else{
                    console.log('success');
                    e.path = cpath;
                    e.name = cname;   
                }
            });
        }

        var nested = cDT(e.path)
        if( nested.children && (nested.children.length > 0) ) renameDir(nested.children);
    });
}

【问题讨论】:

  • 它异步运行,因此在调用renameDir 之后查看dirs 中的值的任何代码都将运行回调运行之前。
  • @Quentin,是的,我什至只尝试过console.log('success')。但看起来它从未记录过。仍然所有目录都完美重命名。
  • @Quentin 请在最后尝试并告诉我。请注意,即使我尝试单独使用 CONSOLE.LOG ,但它没有在控制台中记录它,但操作/重命名过程成功。我使用的是fs.rename 而不是fs.renameSync

标签: javascript node.js filesystems fs


【解决方案1】:

使用此代码和路径应取决于您的文件夹结构

'use strict';
const [fs, path] = [require('fs'), require('path')];

fs.readdir(__dirname, (err, data) => {
data.map(d => {
    if (d.includes(' ')) {
        let name = d.replace(/ /g, '_');
        fs.renameSync(path.resolve(__dirname, d), path.resolve(__dirname, name));
    }
})});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 2015-09-16
    • 2019-08-30
    相关资源
    最近更新 更多