fs.stats Node JS - PullRequest
       87

fs.stats Node JS

0 голосов
/ 21 июня 2020

Мне нужно сравнить размеры двух файлов. Если первое больше второго, возвращается единица; если размеры равны, возвращается ноль, иначе -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);
    }
  })
  })

Функция не возвращает то, что нужно. Куда на go или как правильно подрезать алгоритм? };

Ответы [ 2 ]

1 голос
/ 21 июня 2020

Если вы не хотите блокировать поток выполнения, то вы не можете использовать 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);
        });
    })
}
0 голосов
/ 21 июня 2020

Разве это не будет намного проще

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

не нужен обратный вызов вообще?

...