Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

218
Visualizações
Nodejs Pregunta sobre la dependencia circular

Estaba probando la dependencia circular con commonjs.

 //index.js console.log('main starting'); const a = require('./a.js'); const b = require('./b.js'); console.log('in main, a.done = %j, b.done = %j', a.done, b.done);
 //a.js console.log('a starting'); exports.done = false; const b = require('./b.js'); console.log('in a, b.done = %j', b.done); exports.done = true; console.log('a done');
 //b.js console.log('b starting'); exports.done = false; const a = require('./a.js'); console.log('in b, a.done = %j', a.done); exports.done = true; console.log('b done');

el resultado fue

 // output main starting a starting b starting in b, a.done = false b done in a, b.done = true a done in main, a.done = true, b.done = true

Entonces, index la importación a y a importación b

b intente importar a pero a no está terminado, por lo que devuelve a módulo sin terminar.

Ok bien, entendí.


Pero, ¿qué pasa con la sintaxis de esmodule ?

Reproduje un código como este.

 //index.js console.log('main starting'); import a from './a.js'; import b from './b.js'; console.log('in main, a.done = %j, b.done = %j', a.done, b.done);
 //a.js console.log('a starting'); export let done = false; import {done as B_done} from './b.js'; console.log('in a, b.done = %j', B_done); done = true; console.log('a done'); export default { done }
 //b.js console.log('b starting'); export let done = false; import {done as A_done} from './a.js'; console.log('in b, a.done = %j', A_done); done = true; console.log('b done'); export default { done }

Pero el resultado fue cambiado.

ReferenceError: Cannot access 'A_done' before initialization

Este error ocurrió.

¿Por qué me da un resultado diferente al de commonjs?

¿ esmodule no devuelve módulos sin terminar?

De hecho, puede encontrar este ejemplo de código aquí

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

¿Esmodule no devuelve módulos sin terminar?

Lo hace. Pruebe con var en lugar de let .

¿Por qué me da un resultado diferente al de commonjs?

Porque también cambió el orden de evaluación. Las importaciones se "elevan", la evaluación del código del módulo se difiere hasta que se configuran todas las dependencias (es decir, se terminan de evaluar por completo o se declaran sus variables y se esperan dependencias circulares). A diferencia de la llamada require() , no obtendrá el código de inicialización de b ejecutándose en medio de a .

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda