#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; } }