С помощью Promises можно делать много вещей, но map()
не подходит. Однако вы можете легко переписать это:
function getResults(querySearch) {
api.pageNum += 1;
refs.list.innerHTML = '';
const imgBlock = fetch(
`https://pixabay.com/api/?image_type=photo&orientation=horizontal&q=${querySearch}&page=${api.pageNum}&per_page=12&key=${api.key}`,
)
.then(data => data.json())
.then(json => {
let imgBlock = json.hits.map(item => template(item).join(''));
refs.list.insertAdjacentHTML('beforeend', imgBlock);
})
}
Помните, что imgBlock
является обещанием и совершенно бесполезен для insertAdjacentHTML
, пока он не разрешен. Вы выполнили этот код преждевременно, он должен быть помещен в обратный вызов then
.
Если вы можете использовать async
, этот код действительно прост, и его намного легче понять:
async function getResults(querySearch) {
api.pageNum += 1;
refs.list.innerHTML = '';
const data = await fetch(
`https://pixabay.com/api/?image_type=photo&orientation=horizontal&q=${querySearch}&page=${api.pageNum}&per_page=12&key=${api.key}`,
);
let json = await data.json();
let imgBlock = json.hits.map(item => template(item).join(''));
refs.list.insertAdjacentHTML('beforeend', imgBlock);
}
Все, что вы можете сделать, чтобы уменьшить вложенность в JavaScript, часто оказывается огромной победой, поэтому я рекомендую этот подход.