У меня есть следующий код, который пытается выполнить AJAX -запрос, а затем декодировать полезную нагрузку, поддерживая типы до конца:
export function fetchJson<T>(url: string, data: FetchDataTypes): Promise<T> {
return new Promise((resolve, reject) => {
fetch(url, {})
.then((response: Response) => {
if (!response.ok) {
reject(response);
} else {
return response.text() as Promise<string>;
}
})
.then((text: string) => {
try {
resolve(JSON.parse(text) as T);
} catch (err) {
reject(err);
}
})
.catch((err: Promise<void>) => reject(err));
});
}
Проблема в том, что eslint выдает эту ошибку:
Ожидается, что будет возвращено значение в конце стрелки. Функция constant-return
Я посмотрел документацию и уверен, что это так, потому что первый .then
обратный вызов имеет несоответствие в возврате / отсутствии возврата. Я пытался изменить свой код, чтобы получить возврат или нет, но я не могу понять, как переписать этот код, чтобы снова сделать eslint счастливым.
Все связанные вопросы, которые я мог найти, были ошибками где разработчик забыл вернуться из методов картографирования et c, и я не смог найти их относящиеся к моему сценарию.
Редактировать: Просто чтобы прояснить, я хочу иметь возможность вызывать мою функцию следующим образом:
export const fetchSomeObject = (): Promise<SomeResponseType> =>
fetchJson('/api/some-endpoint', {
method: 'GET',
headers: {},
});
А затем:
fetchSomeObject.then((response: SomeResponseType) => {
[...]
});