Crawl — по-английски ползать. Web Crawler — это штука, которая ползает по вебу и собирает информмацию о сайтах.
Например, там работали примитивные поисковые ситемы в конце девяностых. Поисковая система периодически обходит интернет и сканирует страницы. Если на странице есть ссылки, то она идет по этим ссылкам и делает то же самое.
Вам необходимо реализовать функцию crawl
, которая будет обходить интернет.
startUrls
— массив со строками, с которых мы начинаем обходfetchUrl
— асинхронная функция, которая принимает строку и возвращает промис с объектом с двумя полями:
content
— строка содержимое текстовое страницыurls
— массив со строками, адреса, по которым нам нужно идти дальшеlimit
— число, fetchUrl
максимально может быть запущена столько раз одновременноcallback
— функция, которая должна быть вызвана после того, как мы обойдем все страницы в интрнете
url
, а значениями — content
из результатов функции fetchUrl
.const mockData = { "A": { content: "AAA", urls: ["B", "C"] }, "B": { content: "BBB", urls: ["A"] }, "C": { content: "CCC", urls: ["B", "D"] }, "D": { content: "DDD", urls: [] }, "E": { content: "EEE", urls: ["A"] }, }; const fetcher = (url) => new Promise(resolve => mockData[url], 100); mockData(["A", "B", "E"], fetcher, 2, (map) => { console.log(map); // map === { "A": "AAA", "B": "BBB", "C": "CCC", "D": "DDD", "E": "EEE" } });
Мы считаем, что контент на страницах никогда не меняется, поэтому нужно кэшировать результаты. Если мы ранее вызывали функцию fetchUrl
с каким-то адресом, то нельзя вызываеть ее повторно
Не должно быть «простоя». Если один из вызовов fetchUrl
завершил работу, мы должны сразу запустить следующий, если есть что загружать.