“Un oyente indicó una respuesta asincrónica devolviendo verdadero, pero el canal de mensajes se cerró antes de que se recibiera una respuesta”, ¿Qué significa eso?

6 minutos de lectura

Avatar de usuario de Romin Manogil
romin manogil

Estoy trabajando en una aplicación React y uso algunos módulos npm, uno de los cuales tuve que construir yo mismo. (mi paquete NPM:
https://www.npmjs.com/package/modale-react-rm).

Es un modal simple que se abre y se cierra con un useState().

Después de importar mi paquete, tengo un error en mi consola que aparece repentinamente después de unos segundos sin realizar ninguna acción.


Uncaught (in promise)                                                                  localhost/:1

    >{message: 'A listener indicated an asynchronous response by r…age channel closed before a response was received'}
         message: "A listener indicated an asynchronous response by returning true, but the message channel closed before a response was received"
        >[[Prototype]]: Object
             >constructor: ƒ ()
             >[[Prototype]]: Object

       /* sometimes there are specific elements in addition but I could not check when they appear and when not */

            Promise.then (asynchrone)       
            (anonyme)              @content_script_bundle.js:108
            handleNewFeatures      @content_script_bundle.js:101
            handleUpdatedNodes     @content_script_bundle.js:101
            (anonyme)              @content_script_bundle.js:101
            childlist(asynchrone)
            0                      @purplebox.js:1
            (anonyme)              @purplebox.js:1
            v                      @purplebox.js:1

Error en la img de la consola

No bloquea mis páginas, ni impide el correcto funcionamiento de sus funciones, pero es un error y creo que debería solucionarse y quizás ayudar a otras personas que tienen el mismo problema.

Especifico que no realizo ninguna solicitud asíncrona en este proyecto. Todo es local y los pocos datos que uso se importan directamente en bruto. no se donde Purplebox.js proviene también.

Avatar de usuario de Chrostip Schaejn
chrostip schaejn

Este problema es un problema de solicitud de origen cruzado y está causado por varias extensiones de Chrome. También tenía esto en mi aplicación Angular y después de probarlo en el modo de incógnito, el error ya no apareció.

Más información: Foro de Google

/Editar: si es un desarrollador de extensiones que viene aquí: debe return true al obtener datos de orígenes cruzados. Más información: Proyecto cromo

  • Eso es difícil de decir, no sé qué extensiones estás usando. Ejemplo: Para mí es Ghostery, producen muchos errores de consola. Incluso en su propio sitio web, recibo estos errores.

    –Chrostip Schaejn

    7 jun a las 19:25

  • Para mí fue una extensión también. Seguí mirando mi aplicación tratando de averiguar dónde me había equivocado donde todo era una extensión (Ghostery).

    –Helmut Granda

    8 de junio a las 7:50

  • Usted tenía razón ! Voy a eliminar esta maldita extensión (Ghostery). Gracias !!

    –Romín Manogil

    8 jun a las 11:36


  • Puede agregar un sitio a la lista blanca en Ghostery

    – m4a

    10 de junio a las 8:09

  • Los errores comenzaron a aparecer para mí desde la actualización 102 o 103 de Google Chrome.

    – Woodrow Shigeru

    27 de junio a las 8:18

En mi caso, es causado por Extensión fantasmasi este error aparece en su host local, debe agregarlo a la lista de sitios confiables de Ghostery y el error desaparecerá.

ingrese la descripción de la imagen aquí

  • Esta fue la solución para mí. Gracias 🙂

    – hechizado

    25 de julio a las 11:51

  • Esta fue la solución para mí también gracias.

    –Oussama Boumaad

    27 ago a las 16:12

  • Gracias por compartir. Creo que siempre es una buena idea incluir localhost en la lista blanca en todas las extensiones del navegador para evitar que se intercepten con el desarrollo local.

    – Zeshan Munir

    29 ago a las 18:32

  • hacer clic en “Sitio de confianza” no funcionó para mí, tuve que ir al menú de tres puntos, Confiar y restringir, y agregar “127.0.0.1:*” a la lista de confianza. ¡Después de eso, el error desaparece! gracias

    – Andrew Meservy

    11 de septiembre a las 22:06

Avatar de usuario de Philipp Classen
Philipp Classen

Ha sido discutido en el webextension-polyfill biblioteca, que utilizan muchas extensiones (incluida Ghostery). Hubo un cambio reciente en Chrome que introdujo el mensaje de error.

Para los proyectos que usan el polyfill, espero que la advertencia desaparezca si se fusiona una corrección. Tenga en cuenta que se usa la biblioteca polyfill, ya que solo Firefox implementa el nuevo basado en promesas runtime.onMessagemientras que Chrome sigue aplicando la API de estilo de devolución de llamada original.

Tenga en cuenta que hay un solicitud de extracción abierta en la biblioteca webextension-polyfill ya. No se ha fusionado, pero según mis pruebas, resuelve el problema. Entonces, si necesita una solución rápida para un proyecto que usa la biblioteca internamente, puede aplicar manualmente el parche con paquete de parches. Por ejemplo, así se vería tal cambio en Ghostery.

  • por lo que parece que este no es un problema que deba ser considerado. los Solicitud de extracción mencionado anteriormente es simplemente ignorar el error cuando se encuentra

    – Gangula

    6 de septiembre a las 8:50


  • @Gangula Depende del contexto si puede ignorar la advertencia. En muchos casos en los que la extensión usa webextension-polyfill, es seguro ignorarlo en mi humilde opinión, ya que se usa para la semántica. En general, la advertencia significa que se crea una promesa en un oyente que no será resuelta ni rechazada. Eso puede indicar un error lógico en el código, pero existe un código más antiguo que se ha escrito en ese estilo. Para el código nuevo, evitaría este patrón de comunicación (veo el punto por el que Chrome advierte), pero puede que no sea sencillo cambiarlo en una base de código más grande.

    – Philipp Classen

    6 de septiembre a las 9:28

  • tiene sentido. Estoy trabajando en una extensión en la que me encuentro con este error, pero estoy bastante seguro de que mi lógica es correcta y que la funcionalidad esperada también funciona como se esperaba. Estoy haciendo algunas pruebas más, agregaré más detalles si encuentro alguno

    – Gangula

    6 sep a las 10:09


La secuencia de comandos en segundo plano (trabajador de servicio en MV3) podría pasar a un estado inactivo sin enviar una respuesta a un mensaje que recibió de una secuencia de comandos de contenido.

Ejemplo:

Guión de fondo:

chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  // ... handle message
  return true // Error message says you already return true
})

La mayoría de las API de MV3 son asíncronas y pueden devolver promesas cuando tiene sentido hacerlo. (En algunos casos, como detectores de eventos (p. ej., chrome.tabs.onRemoved), devolver una promesa no tendría sentido). Sin embargo, la lectura de una respuesta se puede hacer mediante devoluciones de llamada o estilo promesa.

Guión de contenido: método 1 para leer la respuesta:

chrome.runtime.sendMessage('ping', (response) => { /* read response */ })

Guión de contenido: método 2 para leer la respuesta:

chrome.runtime.sendMessage('ping').then(response => { /* read response */ })

El problema que enfrenta es este: la secuencia de comandos de fondo no invoca sendResponse() para uno o más mensajes que recibió y quedó inactivo (causando el cierre del canal de mensajes). Sin embargo, el script de contenido que envió el mensaje está esperando la respuesta.

Verifique los remitentes y controladores de sus mensajes.

Yo tenía el mismo error. eliminé el Tampermonkey extensión y modifiqué mi bloque de anuncios extensión y luego funcionó para mí.

Avatar de usuario de Bongani Ntshangase
Bongani Ntshangase

Tuve el mismo error en mi aplicación de reacción cuando introduje un ciclo infinito a través de useEffect, lo que pasa es que lo más probable es que no vea demasiados cambios en su aplicación o problema. Para mí, incluso ayudó a recargar algunos estados para las funciones que aún tenía que escribir, pero con el tiempo introducirá errores y problemas de rendimiento.

¿Ha sido útil esta solución?