Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

102
Vistas
Entendiendo tabs.sendMessage y Promises

He leído la plétora de foros y enlaces de reddit y stackoverflow QnA y no responde la pregunta ni la explica de manera clara. He estado en esto durante 2 o 3 días ahora solo en este asíncrono en espera de promesas bs.

Tengo una función emergente asíncrona que llama a chrome.tabs.sendMessage , como puede ver a continuación, es muy, muy básica. Envío un mensaje, espero una respuesta. Viola, listo.

Mi comprensión de una función de devolución de llamada me dice que chrome.tabs.sendMessage ESPERARÁ una respuesta LUEGO ejecutará la función, pero ¿qué sucede si la función se ejecuta de todos modos? y no puedo darle sentido. Simplemente se ejecuta y recibe lo antes posible sin esperar a que finalice el script de contenido. ¿Cuál es el punto de una función de devolución de llamada entonces?

Intenté agregar esperar antes de enviar y esperar en la función de devolución de llamada y de cualquier manera posible, pero NO funciona. no lo entiendo El programa simplemente se ejecuta sin esperar.

He leído que esto no funciona. y esto no tiene sentido. Las promesas esperan un mensaje "completo" y de alguna manera eso lo hace esperar. ¿Pero la función de devolución de llamada tabs.message también ESPERA una respuesta pero aún se ejecuta de todos modos y no espera nada?

 document.addEventListener('DOMContentLoaded', async function() { console.log('got tabs id'); tab = await getCurrentTab(); console.log('Active tab ' + tab.id); console.log('Sending Message to Content'); chrome.tabs.sendMessage(tab.id, {action: "getDOM"},function (ret) { console.log('Receiving Message from Content'); try { if (!ret.incident.length) return; globalThis.response = ret; processResponse(response); } catch(err) { console.log('doing nothing, bad return data') window.close; return; } }); return; });
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

OP obviamente está muy confundido. devolución de llamada, asíncrono/espera, las promesas son lo mismo pero escrito de manera diferente. A continuación se muestra el código actualizado que usa solo promesas y devoluciones de llamada cuando es absolutamente necesario. En este caso, tabs.sendMessage de Chrome no devuelve una promesa como lo hacen en Firefox. Por lo tanto, debe usar el formulario de devolución de llamada. El content_script en este caso hace un tiempo de espera con sendResponse y funciona bien.

 document.addEventListener('DOMContentLoaded', function() { console.log('got tabs id'); let queryOptions = {active: true, currentWindow: true}; chrome.tabs.query(queryOptions) .then((tabs) => { chrome.tabs.sendMessage(tabs[0].id, {action: "getDOM"}, (response) => { console.log(response); // processResponse(response); }); }) .catch((err) => { console.log(err); window.close(); return; }); });
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda