@taipan90

Как сделать функцию sumFileSizes?

Напишите функцию, которая принимает имена двух файлов и вызывает функцию, переданную третьим параметром и передает ей первым аргументом сумму их размеров.
Для получения размера файла необходимо использовать функцию getFileSize(filename, cb).

let fileSizes = {
  testFile1: 65,
  testFile2: 48,
}

function getFileSize(filename, cb) {
  setTimeout(() => cb(fileSizes[filename]), Math.random() * 500);
}

function sumFileSizes(filename1, filename2, cb) {
  //Ваш код...
}
  • Вопрос задан
  • 115 просмотров
Пригласить эксперта
Ответы на вопрос 2
fomenkogregory
@fomenkogregory
Юниор софтварный инженер
const fileSizes = {
  testFile1: 65,
  testFile2: 48,
}

function getFileSize(filename, cb) {
  setTimeout(() => cb(fileSizes[filename]), Math.random() * 500);
}

function sumFileSizes(filename1, filename2, cb) {
  let s = 0
  const ss = (sss) => s += sss
  getFileSize(filename1, ss)
  getFileSize(filename2, ss)
  setTimeout(() => cb(s), 505)
}

sumFileSizes('testFile1', 'testFile2', (k) => console.log(k))


:~|
Ответ написан
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Честно, не могу понять зачем вы написали этот вопрос, ведь ответ на него элементарен, и вам вполне по силам найти его самостоятельно. Если вы учитесь программировать, то тем более вам нужно подумать самому. Если же это задание из колледжа/универа, и вы не можете его сделать, то вам стоит задуматься над тем, чтобы сменить направление обучения.
решение (лучше решите сами)

let fileSizes = {
testFile1: 65,
testFile2: 48,
}

function getFileSize(filename, cb) {
setTimeout(() => cb(fileSizes[filename]), Math.random() * 500);
}


//решение 1 (тупо в лоб)
function sumFileSizes(filename1, filename2, cb) {
  getFileSize(filename1, (size1)=>{
    getFileSize(filename2, (size2)=>{
      cb(size1+size2);

    });
  })
}

//решение 2 (промисификация)
function sumFileSizes(filename1, filename2, cb) {
  const filelist = [filename1, filename2]
  const promises =  filelist.map(filename=>{
    const promise = new Promise((resolve, reject) => {
      getFileSize(filename, (size)=>{
        resolve(size);
      });
    }); 
    return promise;
  })
  Promise.all(promises).then(values => { 
    const allsize = values.reduce((a,v)=>a+v,0);
    cb(allsize);
  });	
}

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы