Javascript fs.stats节点JS
我需要比较两个文件的大小。如果第一个大于第二个,则返回一个;如果大小相等,则返回零,否则返回-1。 我写了一个我无法通过的测试:Javascript fs.stats节点JS,javascript,node.js,fs,Javascript,Node.js,Fs,我需要比较两个文件的大小。如果第一个大于第二个,则返回一个;如果大小相等,则返回零,否则返回-1。 我写了一个我无法通过的测试: test('compareFileSizes', (done) => { const filepath1 = `${__dirname}/../Makefile`; const filepath2 = `${__dirname}/test.js`; compareFileSizes(filepath1, filepath2, (_error1, re
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);
}
})
})
该函数不返回所需的内容。该走哪条路,或者如何正确切割算法?
}; 这不是容易多了吗
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);
})
根本不需要回调?如果不想阻止执行线程,则不能使用
fs.statSync
,在回调的帮助下,代码将如下所示:
从“fs”导入fs;
export const compareFileSizes=(文件1、文件2、cb)=>{
fs.stat(文件1,(错误,stats1)=>{
如果(错误){
控制台错误(error);
返回cb(错误);
}
const size1=stats1.size;
fs.stat(文件2,(err,stats2)=>{
如果(错误){
控制台错误(err);
返回cb(错误);
}
const size2=stats2.size;
常量结果=数学符号(大小1-大小2);
返回cb(空,结果);
});
})
}
也许可以尝试使用fs.statSync
简化您的代码,以避免任何意外的回调行为?当然需要