Я создал функцию для вызова fetch со всеми необходимыми мне параметрами. Он работает безупречно, но я хочу его немного улучшить. В настоящее время у меня есть две его версии: одна для метода GET, а другая для метода POST. Это потому, что для POST мне нужно передать тело, а для GET нет. Я хотел бы сделать так, чтобы параметр body в функции становился необязательным и включался в выборку, только если он установлен, если это запрос GET.
Это соответствующая часть в случае GET.
async function getData(url = "") {
const response = await fetch(url, {
method: "GET",
mode: "cors",
credentials: "include",
headers: {
"Content-Type": "application/json",
},
});
это соответствующая часть в случае POST
async function postData(url = "", data = {}) {
const response = await fetch(url, {
method: "POST",
mode: "cors",
credentials: "include",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(data),
});
@Pointy, полезно знать о параметрах. Но когда дело доходит до await fetch(url, {..., свойство body должно присутствовать только в том случае, если оно является post. И это то, что я не знаю, как сделать
Вы можете проверить «метод» и посмотреть, GET это или POST. По моему опыту, если вы установите тело в вызове fetch() для undefined, то GET будет доволен. Полагаю, вы действительно спрашиваете, как вообще отказаться от свойства «body» для GET? Вам придется создать объект параметра выборки как отдельный шаг, а затем добавить тело, если это POST.
напишите третью функцию и вызовите ее с помощью метода и потенциального тела в случае публикации и распространите эти аргументы на параметры выборки.
@Pointy, это то, чего я пытался понять, как достичь. Я добавляю часть тела только в том случае, если метод POST и вуаля. Так что мне даже не нужно устанавливать тело как неопределенное.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете создать унифицированную функцию fetchData, которая обрабатывает запросы GET и POST:
async function fetchData(url = "", method = "GET", data = null) {
const options = {
method: method,
mode: "cors",
credentials: "include",
headers: {
"Content-Type": "application/json",
}
};
if (method === "POST" && data !== null) {
options.body = JSON.stringify(data);
}
const response = await fetch(url, options);
return response.json();
}
вероятно, следует также await вызвать JSON.
Вы создали этот ответ с помощью ChatGPT?
Я думаю, вы могли бы просто написать третью функцию, которая делает send
нравиться:
function send(url, options) {
if (!url) {
throw 'url not specified';
}
return fetch( url, {
mode: 'cors',
credentials: 'include',
headers: {
'Content-Type': 'application/json'
},
...options });
}
function getData(url) {
return send( url, { method: 'GET' });
}
function postData(url, body) {
return post( url, { method: 'POST', body: body ? JSON.stringify( body ) : null });
}это позволит вам впоследствии добавить больше методов и сохранить логику заголовков в одном месте.
Параметры в JavaScript всегда необязательны; не понятно, о чем вы спрашиваете. Что, по вашему мнению, вы не можете сделать?