Сделать один аргумент функции необязательным в ES6

Я создал функцию для вызова 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), 
        });

Параметры в JavaScript всегда необязательны; не понятно, о чем вы спрашиваете. Что, по вашему мнению, вы не можете сделать?

Pointy 11.04.2024 21:24

@Pointy, полезно знать о параметрах. Но когда дело доходит до await fetch(url, {..., свойство body должно присутствовать только в том случае, если оно является post. И это то, что я не знаю, как сделать

Lelio Faieta 11.04.2024 21:25

Вы можете проверить «метод» и посмотреть, GET это или POST. По моему опыту, если вы установите тело в вызове fetch() для undefined, то GET будет доволен. Полагаю, вы действительно спрашиваете, как вообще отказаться от свойства «body» для GET? Вам придется создать объект параметра выборки как отдельный шаг, а затем добавить тело, если это POST.

Pointy 11.04.2024 21:28

напишите третью функцию и вызовите ее с помощью метода и потенциального тела в случае публикации и распространите эти аргументы на параметры выборки.

Icepickle 11.04.2024 21:28

@Pointy, это то, чего я пытался понять, как достичь. Я добавляю часть тела только в том случае, если метод POST и вуаля. Так что мне даже не нужно устанавливать тело как неопределенное.

Lelio Faieta 11.04.2024 21:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете создать унифицированную функцию 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.

Pointy 11.04.2024 21:49

Вы создали этот ответ с помощью ChatGPT?

DarkBee 12.04.2024 07:17
Ответ принят как подходящий

Я думаю, вы могли бы просто написать третью функцию, которая делает 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 });
}

это позволит вам впоследствии добавить больше методов и сохранить логику заголовков в одном месте.

Другие вопросы по теме