Асинхронный запрос сценария предварительного запроса Hoppscotch

У меня возникла проблема с порядком асинхронного выполнения .then() в запросе на выборку в моем сценарии JavaScript. Предполагается, что сценарий получит токен аутентификации, а затем установит его в переменной среды. Однако похоже, что вызов URL-адреса моего приложения происходит до выполнения цепочек .then(), что приводит к использованию неустановленного токена. Мне нужно, чтобы токен был получен и установлен перед последующим запросом. Таким образом, он успешно извлекает токен, и сценарий выполняется до первой части выборки, но до .then он вызывает URL-адрес, а затем выполняет остальную часть сценария.

const authUrl = "https://auth0.com/oauth/token";
const authBody = JSON.stringify({
  grant_type: "password",
  client_id: "client_id",
  client_secret: "client_secret",
  scope: "openid profile email",
  audience: "https://audience/",
  username: "username",
  password: "password"
});
console.info("nach dem ziehen des token")
// Execute the fetch request to authenticate
fetch(authUrl, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: authBody
})
.then(response => response.json())
.then(data => {
  if (data.access_token) {
    // Set the access token in an environment variable
    pw.env.set("accessToken", data.access_token);
        pw.env.set("accessToken", data.access_token);
    console.info("accessToken set:", data.access_token); // to check the log
  } else {
    console.error('Error retrieving the token:', data);
  }
})
.catch(error => console.error('Error in fetching auth token:', error));

Как вам удалось избежать [semantic] Unknown identifier 'fetch' в сценарии?

Raffaele Lungarella 18.07.2024 16:53

@RaffaeleLungarella Я не получаю «выборку» неизвестного идентификатора для сценария, может быть, это связано с браузером? Я использую Chrome

LupefiascoMosdef 19.07.2024 22:09

Я получаю это из любого браузера и даже из настольного приложения. Я в полном замешательстве, так как в их репозитории на GitHub есть эта проблема: github.com/hoppscotch/hoppscotch/issues/3305. Кажется, что этой функции не существует, а вы ее используете. Я читаю что-то не так?

Raffaele Lungarella 22.07.2024 13:01

Я все еще использую приведенный ниже сценарий предварительного запроса, и он работает нормально. Я использую его для одного запроса, и после того, как я сделал этот запрос, я могу использовать <<access_token>> и в других запросах, как сказано здесь docs.hoppscotch.io/documentation/getting-started/rest/…

LupefiascoMosdef 23.07.2024 16:55
Поведение ключевого слова "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) для оценки ваших знаний,...
0
4
255
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я решил эту проблему, объявив функцию и вызвав ее в конце:

const authUrl = pw.env.get("auth0_url")+"/oauth/token";
const authBody = JSON.stringify({
  grant_type: "password",
  client_id: pw.env.get("client_id"),
  client_secret: pw.env.get("client_secret"),
  scope: "openid profile email",
  audience: pw.env.get("audience"),
  username: pw.env.get("username_auth0"),
  password: pw.env.get("password_auth0"),
});

function authenticate() {
  try {
    const request = new XMLHttpRequest();
    request.open("POST", authUrl, false);
    request.setRequestHeader("Content-Type", "application/json");
    request.send(authBody);

    if (request.status === 200) {
      const data = JSON.parse(request.responseText);
      if (data.access_token) {
        pw.env.set("accessToken", data.access_token);
        console.info("accessToken set:", data.access_token); 
        // Zusätzlich überprüfen, ob es korrekt gesetzt wurde
        let token = pw.env.get("accessToken");
        console.info("Retrieved accessToken:", token);
      } else {
        console.error('Error retrieving the token:', data);
        pw.env.set("accessToken", "");
      }
    } else {
      console.error('Error in fetching auth token. Status:', request.status);
      pw.env.set("accessToken", "");
    }
  } catch (error) {
    console.error('Error in fetching auth token:', error);
    pw.env.set("accessToken", "");
  }
}

// Funktion aufrufen, um die Authentifizierung durchzuführen
authenticate();

Вы уверены, что не получаете ошибку CORS? Я спрашиваю об этом, потому что в классиках, если переменная env установлена ​​один раз, она будет жить там впоследствии. Таким образом, в любом случае, если вы заполнили accessToken, он останется там, и вы заметите это, пока не истечет срок его действия. вы можете проверить, заглянув в консоль F12.

HAr 10.07.2024 14:55

Да, токен доступа действителен, пока я его не изменю, но я не получаю ошибку Cors.

LupefiascoMosdef 11.07.2024 17:39

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