Звучит как плохо разработанный API, если ожидается, что long_part очень длинный. Вместо запроса GET
он должен использовать POST
, чтобы длинный набор данных мог быть отправлен в объекте body
. Можете ли вы увидеть, разрешает ли API POST-версию конечной точки, которая позволяет это?
Если нет POST
, и вы не контролируете API, у вас не так много вариантов. Единственное, о чем я могу думать, это то, что вы разбиваете свой запрос на несколько отдельных вызовов конечной точки (возможно, по одному на id
), если это возможно и приведет к более коротким url
размерам на запрос.
Несколько вызовов
Если вы можете выполнять несколько небольших запросов, код может выглядеть следующим образом:
const urls = ["firstUrl","secondUrl","nthUrl"];
let combined = {};
for (const url of urls) {
fetch(url)
.then(res => res.json())
.then(json => combined = {...combined, ...json};
}
console.log(combined);
Это предполагает, что разумно объединить результаты всех в один объект. Если они должны быть различны, вы можете изменить последний then
следующим образом:
.then(json => combined = {...combined, {`url${count}`: json}};
, где count
- это целое число, которое вы увеличиваете каждый раз, а combined
будет выглядеть как
{url1: {/*json from url1*/}, url2: {/*json from url2*/}, ...}
Обработка ошибок
Чтобы обработать ошибку более корректно, вы должны проверить результат, прежде чем предположить, что он возвращен JSON
. Вы получили JSON
ошибку разбора, потому что возвращенные данные не были JSON
. Это был HTML
, поэтому он провалился, когда начал с <
. Вы могли бы сделать что-то вроде этого:
fetch(url)
.then(res => {
if (res.resultCode == "200") return res.json();
return Promise.reject(`Bad call: ${res.resultCode}`);
})
.then(console.log);