当使用异步的方法时,无法保证顺序。 因此,以下的操作容易出错,因为 fs.stat() 操作可能在 fs.rename() 操作之前完成:

    1. fs.rename('旧文件', '新文件', (err) => {
    2. if (err) throw err;
    3. console.log('重命名完成');
    4. });
    5. fs.stat('新文件', (err, stats) => {
    6. if (err) throw err;
    7. console.log(`文件属性: ${JSON.stringify(stats)}`);
    8. });

    若要正确地排序这些操作,则移动 fs.stat() 调用到 fs.rename() 操作的回调中:

    1. fs.rename('旧文件', '新文件', (err) => {
    2. if (err) throw err;
    3. fs.stat('新文件', (err, stats) => {
    4. if (err) throw err;
    5. console.log(`文件属性: ${JSON.stringify(stats)}`);
    6. });
    7. });

    或者,使用基于 promise 的 API:

    1. const fs = require('fs/promises');
    2. (async function(from, to) {
    3. try {
    4. await fs.rename(from, to);
    5. const stats = await fs.stat(to);
    6. console.log(`文件属性: ${JSON.stringify(stats)}`);
    7. } catch (error) {
    8. console.error('出错:', error.message);
    9. }
    10. })('旧文件', '新文件');