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

279
Vistas
Llamada de función múltiple a chrome.runtime.sendMessage() con comportamiento síncrono

Conecto content.js con background.js para realizar 2 tareas diferentes: inyectar HTML local y obtener datos de otra página web. Actualmente, createContainer() comienza después de que se realiza fetchweb() y no estoy seguro de por qué (necesito que createContainer() se ejecute primero). Traté de transformar ambas funciones en Promise pero sigue siendo el mismo resultado.

Contenido.js

 function createContainer1() { // call html file container chrome.runtime.sendMessage({ cmd: "read_cont1" }, function (html) { $("#container1").html(html); }); // more code } function fetchWeb() { chrome.runtime.sendMessage( { cmd: "send_url", url: window.location.href}, function (response) { console.log(JSON.stringify(response)); } ); } createContainer1() fetchWeb()

fondo.js

 chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { if (request.cmd == "read_cont1") { $.ajax({ url: chrome.extension.getURL("container1.html"), dataType: "html", success: sendResponse, }); return true; } else if (request.cmd == "send_url") { sendResponse({ review_url: fetchData(request.url) }); return true; } });
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Sus dos sendMessages son funciones asíncronas y, a menos que se trate específicamente de codificación asíncrona a través de devoluciones de llamada, promesas o asíncrono/espera, no creo que haya otra forma de garantizar cuál se resuelve primero.

Si fetchWeb debe ejecutarse cada vez que createContainer envía su mensaje, puede agregar fetchWeb a la devolución de llamada de sendMessage (y luego eliminarlo de su cuerpo principal):

 ...chrome.runtime.sendMessage({ cmd: "read_cont1" }, function (html) { $("#container1").html(html); fetchWeb(); });...

Si fetchWeb solo debe ejecutarse algunas veces, podría pasar datos a la función createContainer respondiendo esa pregunta:

 function createContainer1(executeFetchWeb) { // call html file container chrome.runtime.sendMessage({ cmd: "read_cont1" }, function (html) { $("#container1").html(html); if (executeFetchWeb) {fetchWeb()} }); // more code }

Si está sucediendo algo más en "//más código" que debe suceder antes de que se ejecute fetchWeb, sería útil verlo. Pero a menos que ese código también sea asíncrono, imagino que el código ya se está ejecutando primero. Todo esto también podría hacerse con promesas, pero sendMessage ya está configurado para funcionar bien con devoluciones de llamada. De la documentación :

 chrome.runtime.sendMessage( extensionId?: string, message: any, options?: object, responseCallback?: function, )
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