Вложенные fetch запросы js nodejs
Мне нужно реализовать функцию с использованием вложенных fetch запросов. Получаю следующие ошибки
Failed to load resource: the server responded with a status of 404 (Not Found);
Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0
async function getCart() {
fetch(base_api_path + '/cart/getAllOrders', {method: 'GET'})
.then(res => res.json())
.then(res => {
res.forEach(income => {
.....
fetch(base_api_path+'/cart/getItems',
{
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(
{
id: income.itemId
}
)
})
.then(res => res.json())
.then(res => {
res.forEach(intel => {
.....
})
})
})
}
Подскажите, можно ли вообще использовать fetch внутри fetch, и в чем моя ошибка?
exports.getAllOrders = async function (req, res) {
if(req.user){
const allOrders = await Orders.findAll({ where: { userId: req.user.id } })
res.send(JSON.stringify(allOrders)) }
}
exports.getItems = async function (req, res) {
const allItems = await Items.findAll({ where: { id: req.body.id } })
res.send(JSON.stringify(allItems));
}
Ответы (1 шт):
У вас есть async. Ещё вижу await. Значит знакомы с этим понятием. Тогда совсем не ясно зачем использовать promise hell и callback hell, от которых async await вполне себе избавляет.
У вас небольшой хаос. Вы и используете async/await, который работает с промисами и одновременно используете then. Зачем - непонятно.
Вот простой случай работы с fetch:
async function getSmth() {
const response = await fetch('/getSmth');
const data = await response.json();
}
Соответственно чтобы сделать второй fetch, его надо написать ниже.
(код взят из https://learn.javascript.ru/async-await)
async function getSmth() {
// запрашиваем JSON с данными пользователя
let response = await fetch('/article/promise-chaining/user.json');
let user = await response.json();
// запрашиваем информацию об этом пользователе из github
let githubResponse = await fetch(`https://api.github.com/users/${user.name}`);
let githubUser = await githubResponse.json();
}
Видите как просто и легко работать с асинхронными запросами (даже с несколькими) и ответами?
По вопросу об ошибке: какой-то из запросов отвечает не 200 статусом, и в теле возвращает не json, а что-то другое, сокрее всего html. Из-за этого, какой-то из вызовов res.json() падает.