Me quedo atascado en una función asíncrona que está cambiando su valor a través de la ejecución. Esta función hace una llamada a "openlibrary", que toma el número isbn del parámetro de la función. Entonces, la llamada a la biblioteca es exitosa y fetch devuelve un objeto de libro. También imprimo ese parámetro antes de la return y sigue siendo correcto, hasta la declaración de devolución.
¿Por qué ese valor gira (intermediate value) en el segundo argumento del constructor de la clase Book ?
class Book { constructor(title, authors, isbn, id) { this.title = title this.authors = authors this.isbn = isbn this.id = id } } const searchByISBN = async (isbn) => { const url = `https://openlibrary.org/api/books?bibkeys=ISBN:\ ${isbn}&jscmd=details&format=json` const req = await fetch(url).catch(e => { // Request failed console.debug(e) return null }) const data = await req.json() console.dir(data) // No book with given isbn has been found if (data[`ISBN:${isbn}`] === undefined) return false console.debug(isbn) return new Book(data[`ISBN:${isbn}`].details.title, data[`ISBN:${isbn}`].details.authors.map(a => a.name), isbn, books.length) } ... // Inside some async function or browser console book = await searchByISBN('1234567890') ...Salida de la consola:
Object { "ISBN:1234567890": {…} 1234567890 Uncaught (in promise) TypeError: data[("ISBN:" + (intermediate value))].details.authors is undefined"Hola compañero que comparte el mismo plano de existencia" - Rem. ¡Creo que el problema podría estar en el ISBN que estás probando!
Cuando miro el JSON provisto con este enlace: https://openlibrary.org/api/books?bibkeys=ISBN:1234567890&jscmd=details&format=json no muestra ningún autor. Entonces, lo más probable es que su código esté confundido acerca de por qué no hay autores después de que se le pida que recupere el autor 😔