Вам нужны две функции (может быть, три), одна для запроса страницы (назовем ее точно requestPage()
, я не буду показывать, как вы должны реализовать ее, как это должно быть довольно очевидно), и возвращать проанализированный результат (чтоможет быть другой функцией, в зависимости от ваших потребностей в разборе), и оркестратором (цикл, который есть в вашем псевдокоде).
Хитрость в том, что ваш оркестратор должен быть функцией async
.
async function findItem(item: Item) {
for (let page = 1; page <= 10; page++) {
const contents = await requestPage(page);
if (contents.include('whateverYouAreInterestedIn')) {
return page;
}
}
return -1;
}
Обратите внимание, насколько близко это напоминает синхронно выглядящий код.Интересные биты: async
, который я добавил перед ключевым словом function
, и await
, который я добавил перед обещанием, возвращаемым requestPage(page)
.
Кроме того, в качестве дополнения, TypeScript может, как правило, выводитьвозвращаемый тип функций (даже асинхронные функции), поэтому почти никогда не требуется явно указывать тип возвращаемого значения.
Стоит отметить, что равно возможно реализовать без использования асинхронной функции, с умным использованием цепочки .then()
s и полурекурсивной функции, но, на мой взгляд, она гораздо менее читаема, чем простая асинхронная функция с чистым циклом.