Estoy usando fetch para obtener datos de un archivo json. En un .then(), llamo a una devolución de llamada para hacer algo con esos datos y, finalmente, devuelvo el valor final de la devolución de llamada. El problema es que, cuando regreso, devuelve una promesa en lugar del valor final. Revisé otras preguntas similares y pensé que tenía los conceptos asincrónicos, pero todavía estoy atascado en esto. ¿Se me escapa algo?
const func = (callback) => { fetch('https://asdf.json') .then(response => { return response.json(); }) .then(data => { return callback(data) } } const callBack = (parsedData) => { //do something to get finalValue return finalValue } func(callBack); Debo agregar que intenté simplemente llamar a callback(data) sin el retorno, pero esto simplemente devolvió indefinido.
fetch devuelve una promesa, por lo que debe usar async/await o then() para que funcione correctamente. Por ejemplo:
const func = (callback) => { return fetch('asdf.json') .then(response => { return response.json(); }) .then(data => { return callback(data) }) } const callBack = (parsedData) => { //do something to get finalValue return parsedData; } const main = async () => { console.log(await func(callBack)); } main();Usando entonces():
const func = (callback) => { return fetch('asdf.json') .then(response => { return response.json(); }) .then(data => { return callback(data) }) } const callBack = (parsedData) => { //do something to get finalValue return parsedData; } func(callBack).then(response=> { console.log(response); })