ASTRO轻应用 ASTROZERO-脚本的模块使用限制:循环依赖

时间:2024-10-23 11:00:34

循环依赖

当循环调用模块时,一个模块可能在未完成执行时被返回。因此,需要仔细的规划模块间调用,以允许循环模块依赖在应用程序内正常工作。

例如,脚本a:

console.log('a 开始');
exports.done = false;
import * as b from 'b';
console.log('在 a 中,b.done = ', b.done);
exports.done = true;
console.log('a 结束');

脚本b:

console.log('b 开始');
exports.done = false;
import * as a from 'a';
console.log('在 b 中,a.done = ', a.done);
exports.done = true;
console.log('b 结束');

脚本main:

console.log('main 开始');
import * as a from 'a';
import * as b from 'b';
console.log('在 main 中,a.done = ', a.done ',b.done = ', b.done);

当main加载a时,a又加载b。 此时,b又会尝试去加载a。 为了防止无限的循环,会返回一个a的exports对象的未完成的副本给b模块。然后b完成加载,并将exports对象提供给a模块。当main加载这两个模块时,它们都已完成加载,因此该程序的输出会是:

main 开始
a 开始
b 开始
在 b 中,a.done = false
b 结束
在 a 中,b.done = true
a 结束
在 main 中,a.done=true,b.done=true
support.huaweicloud.com/usermanual-astrozero/astrozero_05_05009.html