Estoy tratando de acceder a los datos devueltos dentro de mi solicitud POST, fuera de la solicitud, preferiblemente disponibles globalmente para poder acceder a ellos en otras funciones. Lo que realmente estoy tratando de hacer es acceder a datos JSON específicos y realizar cambios a través de otras funciones y solicitudes PUT/GET (estoy haciendo un juego de adivinanzas de línea de comando).
NOTA: He visto muchas de estas mismas preguntas aquí, pero no puedo entender cómo alguna respuesta se relaciona con mi código/ninguna de las respuestas es realmente lo que estoy buscando. Me gustaría saber qué paso me falta en mi propio código para ayudarme a lograr esto.
Aquí está mi código hasta ahora. Sé que estoy cerca, pero estoy atascado en este punto.
const apiUrl = 'https://word-guessing-game.onrender.com' let jsondata = ""; async function getJson(url) { let response = await fetch(apiUrl, { method: 'POST', headers: { 'Content-Type': 'application/json', }, }); let data = await response.json() let gameId = data.game.id return gameId } async function main() { getJson(apiUrl) .then(data => console.log(data)); } main();En este momento tengo esta configuración para simplemente devolver el game.id, porque eso es a lo que estoy tratando de acceder con una función separada/solicitud de obtención. ¡Cualquier ayuda es apreciada!
Esta es la forma en que puede usar sus datos asíncronos con otra función
const apiUrl = 'https://word-guessing-game.onrender.com' async function getJson(url) { let response = await fetch(apiUrl, { method: 'POST', headers: { 'Content-Type': 'application/json', }, }); let data = await response.json() let gameId = data.game.id return gameId } function processData(data) { console.log(data) } async function main() { const data = await getJson(url) processData(data) } main().then();Entonces, como probablemente sepa, el javascript se ejecuta de arriba hacia abajo, así que veamos qué sucede allí:
apiUrl constantegetJsonprocessDatamaingetJson , donde pasamos nuestra apiUrl como parámetro. la tecla await nos permite "esperar" el resultado de la función para que podamos acceder a él con nuestra función processData PD. .then() Utilicé porque generalmente la mayoría de las herramientas de inspección e IDE no están contentas cuando llamas a una función que devuelve una Promesa, que ignoras.
Si está usando async/await , ¿por qué no usarlo así?
let jsonData = await getJson(apiUrl) // jsonData will receive the value which getJson is returning // in this case, the game id. Si debe usar la sintaxis .then , deberá pasar una devolución de llamada para actualizar el valor de jsonData
// in getJson function pass another callback async function getJson(url, cb) { . . . let data = await response.json() let gameId = data.game.id cb(gameId); Y tu función cb puede verse así
function cb(data) { jsonData = data; // same json data declared at the top }