Así que tengo un pequeño proyecto que contiene partes de frontend (html) y backend (express: servidor, enrutadores). El proyecto no es tan limpio, por lo que su operatividad principal se inicia directamente en la sección html. Y no tengo mucho claro aquí, especialmente ¿qué función se pasa a cb (devolución de llamada) aquí?
Tengo el siguiente código en parte de mi página html dentro del proyecto js:
const $ = document.getElementById.bind(document) const request = (path, cb) => fetch(path) .then((res) => { if (res.ok) return res.json() throw Error('HTTP error: ' + res.status) }) .then(cb) .catch((err) => ($('result').innerHTML = err)) const main = async () => { const pinRequired = new URLSearchParams(document.location.search).get('pin') const id = await request(`./qrcode?pin=${pinRequired}`, (json) => { const { qrbase64, deeplink, pin, id } = json $('qrcode').innerHTML = `<img src="${qrbase64}" alt="Red dot" />` $('deeplink').innerHTML = `<a href=${deeplink} target="_blank"> ${deeplink.slice(0, 90)}...</a>` $('pin').innerHTML = pin ? pin : 'Not requested' return id }) setInterval(() => request(`./status?id=${id}`, ({ status }) => ($('result').innerHTML = status)), 1000) } main().catch(console.log)¿Es esto (json)? Tampoco sé por qué está entre corchetes (), sin embargo, es un objeto, no se puede pasar como una devolución de llamada, ¿verdad?
Y también tengo un código en otro archivo, que contiene la ruta /qrcode de mi sitio web. Hay una función (bastante grande, así que no la estoy publicando, solo señalo que no devuelve la función que puede pasar como una devolución de llamada).
Si esta devolución de llamada al 100 % está en otra parte del código, como crees, házmelo saber.
Si lo que está preguntando es esta devolución de llamada (json) => { ... } en el código a continuación:
request(`./qrcode?pin=${pinRequired}`, (json) => { const { qrbase64, deeplink, pin, id } = json $('qrcode').innerHTML = `<img src="${qrbase64}" alt="Red dot" />` $('deeplink').innerHTML = `<a href=${deeplink} target="_blank"> ${deeplink.slice(0, 90)}...</a>` $('pin').innerHTML = pin ? pin : 'Not requested' return id });Entonces esto es lo que se conoce como función de flecha . Puedes leer sobre ellos aquí en MDN. Son una sintaxis abreviada para declarar una función que también tiene una serie de diferencias de implementación.
Tenga en cuenta que hay algunos otros problemas en su código, ya que request() no devuelve una promesa, por lo que no sirve de nada usar await en él y tampoco obtendrá la id de la identificación de return id .
También tenga en cuenta que la biblioteca de solicitudes ha quedado obsoleta y, por lo general, no debe usarse para código nuevo. Aquí hay una lista de alternativas , todas las cuales admiten promesas de forma nativa. Mi favorito en esa lista es la biblioteca got() .