Почему вместо повторного запроса значения с сервера следует переход в then()?
Вложений: 1
Продолжаю делать учебный проект, который запрашивает данные по товарам с некого локального сервера(код сервер не буду прикладывать) с помощью функции getGoodsList(), декларированной в файле APImodel.js.
Эта функция вызывается при построении приложения в функции createApp(), декларированной в файле view.js. выглядит это усеченно так: async function createApp(container, model) { const spinner = document.getElementsByClassName('spinner-border')[0]; spinner.style.display = ''; // покажем спиннер model.getGoodsList() .then(goodsData => { if (typeof goodsData !== 'undefined') { if (goodsData !== null && goodsData.products.length > 0){ let goodsUL = createGoodsList(); container.append(goodsUL); for (let item in goodsData.products) { let product = createLi(goodsData.products[item]); goodsUL.append(product); } } } }) ... А вот код getGoodsList() из APImodel.js: //получение списка товаров: function getGoodsList(step = 0) { return fetch(`http://localhost:3000/api/products`) .then(res => { if (res.status === 404) { throw new Error ('404'); } if (res.status === 500) { if (step < 2) { getGoodsList(++step); } else { throw new Error ('500'); } } return res.json(); }); } В этой функции получения данных происходит её рекурсивный самовызов(не более двух раз) в случае, если ответ сервера вернул статус 500. В результате отладки увидел, что если статус ответа сервера равен 500, то после повторного вызова функции getGoodsList(), не дожидаясь нового ответа от сервера, ход исполнения программы перескакивает в секцию then() функции createApp(). Есть пара вопросов: 1. Почему такое происходит? 2. Как заставить код дождаться ответа после повторного обращения к серверу, прежде чем переходить в секцию then() функции createApp()? |
|
ты опять забыл return
function getGoodsList(step = 0) { return fetch(`http://localhost:3000/api/products`) .then(res => { if (res.status === 404) { throw new Error ('404'); } if (res.status === 500) { if (step < 2) { return getGoodsList(++step); } else { throw new Error ('500'); } } return res.json(); }); } |
Цитата:
|
Цитата:
|
return fetch(...) Вернет промис, который должен разрешиться впоследствии... Там "внутри" у тебя есть getGoodsList() - вот промис должен разрешиться его значением. А у тебя есть просто вызов. Ты его вызвал, а вернул таки return res.json() А не, нужный тебе, результат... |
Часовой пояс GMT +3, время: 06:26. |