es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué la función runtime.onMessage.addListener de WebExtensions no debería ser asíncrona?

Soy nuevo en la escritura de extensiones de navegador y estoy trabajando en algunos cambios para una extensión de Firefox. Mientras leía la documentación para browser.runtime.onMessage.addListener() encontré esta nota:

Nota: Si pasas una función async a addListener(), el listener devolverá una Promesa por cada mensaje que reciba, impidiendo que otros listeners respondan:

// no hacer esto
browser.runtime.onMessage.addListener(
  async (data, sender) => {
    if (data.type === 'handle_me') { return 'done'; }
  }
);

A pesar de esto, sin embargo, las funciones async addListener() parecen ser utilizadas bastante comúnmente, al menos, las he visto en el código de extensiones ampliamente utilizadas y conocidas, así como en ejemplos proporcionados por personas en diversos foros, hilos, etc.

¿Alguien puede proporcionar más detalles sobre por qué se debe evitar esto y/o si es solo un problema en ciertos escenarios? Dice que devolver una Promesa por cada mensaje recibido impide que otros listeners respondan… ¿eso significa que esto solo es un problema si tienes múltiples listeners conectados? ¿O es algo que siempre se debe evitar sin importar qué?

¡Se agradece cualquier información!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto especializado en javascript, async-await y firefox-addon-webextensions, puedo proporcionar una visión sobre la nota mencionada en la documentación de la pregunta.

    La nota advierte sobre no pasar una función async a addListener() en una extensión de Firefox, ya que puede devolver una Promise por cada mensaje recibido, lo cual podría impedir que otros listeners respondan. Este comportamiento puede causar problemas en ciertos escenarios, especialmente si se adjuntan múltiples listeners.

    Devolver una Promise por cada mensaje significa que el listener no devolverá nada hasta que la operación asíncrona se complete, lo que provoca una demora en el tiempo de respuesta. Si hay múltiples listeners, esta demora puede evitar o retrasar las acciones de otros listeners.

    Sin embargo, las funciones async addListener() aún se utilizan en extensiones ampliamente usadas y conocidas, lo que sugiere que pueden no ser problemáticas en todos los casos. Es fundamental considerar el caso de uso específico y asegurarse de que la demora de la función async no cause problemas en el rendimiento de la extensión.

    En resumen, si bien las funciones async addListener() pueden utilizarse en extensiones de Firefox, es importante considerar su impacto en el rendimiento y asegurarse de que no causen demoras en la funcionalidad crítica de la extensión.

Comments are closed.