Javascript (o Node.js) no devuelve objetos como se esperaba.
El siguiente código registra una matriz vacía.
const _sodium = require('libsodium-wrappers');
const sodium = (async () => {
await _sodium.ready;
return _sodium;
})();
console.log(Object.getOwnPropertyNames(sodium));
Por otro lado, el siguiente código funciona como se esperaba.
const _sodium = require('libsodium-wrappers');
(async () => {
await _sodium.ready;
const sodium = _sodium;
console.log(Object.getOwnPropertyNames(sodium));
})();
En el primer fragmento de código, parece que el objeto de sodio está vinculado a su entorno léxico, lo que explicaría por qué se imprime una matriz vacía. Me interesaría saber qué sucede aquí (incluida una explicación de lo que sucede debajo del capó). Gracias.
No se trata del contexto léxico.
Simplemente no estás esperando a que ready en el primer ejemplo.
Primer ejemplo simplificado:
(async() => {
console.log('start')
await new Promise(r => setTimeout(r, 3000))
console.log('finish')
})()
Segundo ejemplo simplificado:
console.log('start');
(async() => {
await new Promise(r => setTimeout(r, 3000))
})();
console.log('finish')