Node.js:如何从其回调中再次调用函数

时间:2015-01-11 05:48:21

标签: javascript node.js

我想在服务器中创建一个目录。但是想要检查一个是否已存在同名。如果不存在目录,则创建一个提供名称的目录。否则,将随机字符串附加到提供的名称,并重新检查是否存在具有新名称的名称。

到目前为止,我能够编写一个执行初始检查的函数,如果它不存在则创建一个。但是如果目录存在,不知道再次运行检查。

var outputDir = __dirname + '/outputfiles/' + values.boxname;

function ensureExists(path, mask, cb) {
    if (typeof mask == 'function') {
        cb = mask;
        mask = 484;
    }
    fs.mkdir(path, mask, function(err) {
        if (err) {
            cb(err);
        } else cb(null); // successfully created folder
    });
}

并调用函数

ensureExists(outputDir, 484, function(err) {
    if (err) {
        if (err.code == 'EEXIST') {
            var outputDir = outputDir + '-' + Date.now();
            // NEED Help here to call this function again to run the check again
            return console.log("A Folder with same name already exists");
        } else {
            console.err(err);
        };
    } else {
        console.log("Folder created");
    }
});

所以,简而言之,我想在服务器中创建具有唯一名称的目录。请帮助我解决这个问题..谢谢

1 个答案:

答案 0 :(得分:0)

function callback(err) {
    if (err) {
        if (err.code == 'EEXIST') {
            var outputDir = outputDir + '-' + Date.now();
            // NEED Help here to call this function again to run the check again
            ensureExists(outputDir, 484, callback); // Call again
            return console.log("A Folder with same name already exists");
        } else {
            console.err(err);
        };
    } else {
        console.log("Folder created");
    }
}
ensureExists(outputDir, 484, callback); // Call first

或者您可以将功能合并为一个:

function ensureExists(path, mask, cb) {
    if (typeof mask == 'function') {
        cb = mask;
        mask = 484;
    }
    fs.mkdir(path, mask, function(err) {
        if (err) {
            if (err.code == 'EEXIST') {
                var newpath = path + '-' + Date.now();
                ensureExists(newpath, mask, cb); // rerun with new path
                console.log("A Folder with same name already exists");
            } else {
                console.err(err);
            };
        } else cb(path); // successfully created folder
    });
}