Вызовите метод get из JS и верните только строку

#javascript

Вопрос:

Я не разработчик JS, и у меня есть простой вопрос. У меня есть конечная точка, которая возвращает токен в виде строки. Я написал этот метод

 async function login() {  let response = await fetch("generate");  return response.data; }  getUserToken: async function () {  var token = login()  console.log("token: "  token)  console.log("token.data: "  token.data)  console.log("token.body: "  token.body)  console.log("token.json(): "  token.json())  return token;  }  

И у меня есть этот журнал

 token: [object Promise] token.data: undefined token.body: undefined  

Когда я вызываю этот метод в браузере, я получаю свою строку: fgfgxfgfgfgxcfg

Как я могу получить эту строку из JS?

Комментарии:

1. Ты забыл подождать? var token = await login() ?

2. Я нахожусь на грани между ответом и голосованием, чтобы закрыть как опечатку… Вы просто забыли await о async вызове функции.

3. @ crashmstr Я добавил ожидание — Неперехваченное (в обещании) значение токена не является строкой

Ответ №1:

Вам не хватает ключевого слова await в функции getUserToken.

Измените свой код на этот:

 async function login() {  let response = await fetch("generate");  return response.data; }  async function getUserToken () {  var token = await login()  console.log("token: "  token)  console.log("token.data: "  token.data)  console.log("token.body: "  token.body)  console.log("token.json(): "  token.json())  return token; }  

Или вы можете сделать это лучше вот так:

 async function login() {  let response = await fetch("your-api-endpoint");  let text = await response.text();  return text; }  async function getUserToken () {  try{  var token = await login()  console.log("token: "  token);    return token;  }catch(err){  console.log(`Error on fetch: ${err.message}`);  return null;  } }