javascript - 如何获取 fs.rename 的结果

标签 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 的。 ,而不是如何绕过异步属性

最佳答案

根据 @pawel 的见解,我使用 Promise 来解决这个问题。我不知道在服务器端 Node.js 上使用 Promise 是否是一个好习惯。

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

关于javascript - 如何获取 fs.rename 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47044891/

相关文章:

node.js - 使用 Node.js,每秒多次写入文件的最佳方法是什么

node.js - fs.existsSync 在 Electron 中使用时不是函数

javascript - js中如何将数据更新到文件中特定位置

javascript - 面向对象的Javascript中公共(public)函数和使用原型(prototype)添加的函数有什么区别

javascript - 如何在 NodeJs 中手动更新多个 Mongo 文档?

javascript - 安装 npm 包时自动安装类型定义

node.js - 风 sails .js : Waterline OR filter not working

javascript - 为什么 setTimeout ("otherFunction()",2000) 错误?

javascript - 没有编码的十六进制字符串

javascript - 使用 Node.js 和 Socket.io 流式传输搜索查询(流式传输到给定套接字!)