Существующий класс Folder
имитирует работу директории файловой системы, которая работает асинхронно.
Вам нужно вернуть массив из файлов с расширением .js
. Файлы в ответе могут идти в любом порядке.
Так как файловая система работает асинхронно, методы класса Folder
в качестве последнего аргумента принимают колбек, который срабатывает, когда метод отработал.
// root.size ничего не возвращает, // но принимает колбэк в качестве аргумента root.size((s) => { console.log(s); // s === 5 }); // т.к. размер root равен 5, // валидными индексами являются числа от 0 до 4 root.read(4, (x) => { console.log(x); // x === "8.html" });
Если вы знаете TypeScript, то вот так выглядел бы интерфейс, описывающий Folder:
interface Folder { size(cb: (len: number) => void): void; read(index: number, cb: (file: Folder | string) => void): void; }
root ├── 1.js ├── 2.js ├── foo │ ├── bar │ │ └── 3.txt │ └── 4.js ├── baz │ ├── 5.png │ ├── 6.js │ └── moo │ └── 7.txt └── 8.html
const root = Folder([ "1.js", "2.js", Folder([ Folder([ "3.txt", ]), "4.js", ]), Folder([ "5.png", "6.js", Folder([ "7.txt", ]), ]), "8.html", ]); findAllJavascriptFiles(root, arr => { console.log(arr); // arr === ["1.js", "2.js", "4.js", "6.js"] })
Для того чтобы решить задачу, вам не нужно знать, как устроен класс Folder. Достаточно знать, как работают его методы.
Для локального тестирования вы можете написать свою реализацию или воспользоваться этой:
function Folder(files) { const rand = () => Math.random() * 500; return { read: (index, cb) => void setTimeout(cb, rand(), files[index]), size: (cb) => void setTimeout(cb, rand(), files.length), }; }
Эта задача не на промисы. Предполагается, что вы решите задачу без использования промисов.