为了账号安全,请及时绑定邮箱和手机立即绑定

fs.stats 节点 JS

fs.stats 节点 JS

繁花如伊 2022-10-13 10:39:02
我需要比较两个文件的大小。如果第一个大于第二个,则返回一个;如果大小相等,则返回零,否则返回-1。我写了一个我无法通过的测试:test('compareFileSizes', (done) => {  const filepath1 = `${__dirname}/../Makefile`;  const filepath2 = `${__dirname}/test.js`;  compareFileSizes(filepath1, filepath2, (_error1, result) => {    expect(result).toBe(-1);    done();  });});我的代码:import fs from 'fs';export const compareFileSizes = (file1, file2, cb) => {  fs.stat(file1, (_err, stats1) => {    let size1 = stats1.size;    cb(_err, size1);  fs.stat(file2, (_err, stats2) => {    let size2 = stats2.size;    cb(_err, size2);    if(size1 > size2){      return Math.sign(1);    } else if(size1 === size2){      return Math.sign(0);    } else{      return Math.sign(-1);    }  })  })该函数不返回所需的内容。走哪条路或如何正确地削减算法?};
查看完整描述

2 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

如果您不想阻塞执行线程,则不能使用fs.statSync,在回调的帮助下,您的代码将如下所示:


import fs from 'fs';


export const compareFileSizes = (file1, file2, cb) => {

    fs.stat(file1, (error, stats1) => {

        if (error) {

            console.error(error);

            return cb(error);

        }


        const size1 = stats1.size;


        fs.stat(file2, (err, stats2) => {

            if (err) {

                console.error(err);

                return cb(err);

            }


            const size2 = stats2.size;

            const result = Math.sign(size1 - size2);


            return cb(null, result);

        });

    })

}


查看完整回答
反对 回复 2022-10-13
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

所以这不是更容易吗


import fs from 'fs';

export const compareFileSizes = (file1, file2) => {

  let size1 = fs.statSync(file1).size;

  let size2 = fs.statSync(file2).size;

  return Math.sign(size1 - size2);

})

根本不需要回调?


查看完整回答
反对 回复 2022-10-13
  • 2 回答
  • 0 关注
  • 69 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信