Tengo una función que debe validar algún artista de la API de Spotify, pero cuando la ejecuto, artistas [] permanece vacío porque la función se ejecuta de forma asíncrona, llena la variable usuario sin tener artistas configurados.
let artists = [] function setArtists(input) { artists.length = 0 let parsedInput = input.value.split(",") parsedInput.forEach(artist => { validateArtist(artist) }) } function validateArtist(s) { let token = localStorage.getItem("Token") let url = "https://api.spotify.com/v1/search?type=artist&q=" + s console.log(url) fetch(url, { "method": "GET", "headers": { 'Accept': 'application/json', 'Content-Type': 'application/json', "Authorization": "Bearer " + token, } }) .then(response => { if (response.status === 401) { refreshToken(s) } return response.json() }) .then(searchedResults => searchedResults.artists.items.length != 0) .then(isArtist => { if (isArtist) { artists.push(s) } }) }Aquí es donde llamo a la función, la llamo antes para que pueda llenar a los artistas.
setArtists(document.getElementById("artistiPreferiti")) var user = { username: document.getElementById("username").value, email: document.getElementById("email").value, password: document.getElementById("password").value, gustiMusicali: document.getElementById("gustiMusicali").value, artistiPreferiti: artists }¿Qué me estoy perdiendo?
Las palabras clave async (y await ) son herramientas para administrar promesas que, a su vez, son herramientas para administrar código asíncrono de forma estándar.
El uso de la palabra clave async no hace que una función se ejecute de forma asíncrona y no usar la palabra clave no evita que el código asíncrono lo sea.
fetch se ejecuta de forma asíncrona. Su código usa fetch . Por lo tanto, su código es asíncrono.