fs.stats 节点 JS

我需要比较两个文件的大小。如果第一个大于第二个,则返回一个;如果大小相等,则返回零,否则返回-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);

    }

  })

  })

该函数不返回所需的内容。走哪条路或如何正确地削减算法?};


繁花如伊
浏览 87回答 2
2回答

芜湖不芜

如果您不想阻塞执行线程,则不能使用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);        });    })}

牧羊人nacy

所以这不是更容易吗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);})根本不需要回调?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript