Algo extraño está pasando en una extensión que estoy construyendo en Thunderbird. Lo he señalado en un ejemplo muy específico. Este ejemplo funciona bien en un entorno normal de node.js, pero en Thunderbird simplemente detiene la ejecución en un momento aleatorio (parece que depende del tiempo).
Estoy usando un comando de espera dentro de un ciclo for, pero el ciclo for nunca llega al final. Si elimino el comando await, funciona bien.
Estoy pensando que podría haber algún tipo de limitación de tiempo con la API MailExtensions. No estoy seguro de qué hacer aquí.
Este es el código:
async function load() { let tmp; for (var i = 0; i < 30; i++) { console.log(`i: ${i}, before the await`); tmp = await resolveAfterTimeout(); console.log(`i: ${i}, after the await`); }; console.log('done'); } function resolveAfterTimeout() { console.log('inside timeout'); return new Promise(resolve => { console.log('inside new Promise'); setTimeout(() => { console.log('inside setTimeout'); resolve('resolved'); }, 100); }); }Salida de consola (final):
i: 5, after the await i: 6, before the await inside timeout inside new Promise inside setTimeout i: 6, after the await i: 7, before the await inside timeout inside new Promise inside setTimeout i: 7, after the await i: 8, before the await inside timeout inside new Promise Webconsole context has changed¡Problema resuelto con la ayuda de los increíbles miembros del chat del foro de Thunderbird! Parece que es completamente mi culpa: la extensión se activa mediante una ventana emergente y se ejecuta mientras la ventana emergente está abierta. Haría clic en un botón para abrir la ventana emergente y cambiaría a la consola para ver el resultado, mientras cerraba la ventana emergente y me sorprendía por qué se detiene la ejecución :)