如何获得fs.rename的结果

时间:2017-10-31 21:36:35

标签: javascript node.js fs

我正在使用Node.js和fs模块。上传文件时,我想将其重命名为原始名称并记录更新后的名称(原始名称)。我重命名上传文件的代码工作正常。但我在打印fileName时遇到问题。

let fileName = "";
form.on('file', function(field, file) {
    fs.rename(file.path, path.join(form.uploadDir, file.name), function(err) {
        if (err != null) {
            console.log(err);
        }
        fileName = path.join(form.uploadDir, file.name);
    });
});

let name = fileName;
console.log("NAME " + name);

我应该采取哪些不同的方式?

编辑:这不是重复,因为问题确实是关于fs.rename,而不是如何绕过异步属性

1 个答案:

答案 0 :(得分:1)

借助@pawel的见解,我用承诺来解决这个问题。我不知道在服务器端Node.js上使用promises是否是一种好习惯。

let fileName = "";
let p = new Promise((resolve, reject) => {
    form.on('file', function (field, file) {
        fs.rename(file.path, path.join(form.uploadDir, file.name), function (err) {
            if (err != null) {
                console.log(err);
                reject(err);
            }
            fileName = path.join(form.uploadDir, file.name);
            resolve(fileName);
        });
    });
});

p.then((fileName) => {
    console.log("NAME " + fileName);
});