使用下面的Lodash memoize示例,我的理解是,otherModule.js
在抓取data2
时将使用从data
获取的缓存版本,但是如果otherModule.js
先前获取/缓存otherModule2.js
,它还会使用data
的缓存版本吗?如果没有,有没有办法让这两个模块共享相同的缓存?
// getData.js
import _ from 'lodash';
const dataPromise(url) = async fetch(url).then(value => value.json());
export const memDataPromise = _.memoize(dataPromise);
// otherModule.js
import { dataPromise } from './getData.js';
const data = await dataPromise('someUrl');
const data2 = await dataPromise('someUrl');
// OtherModule2.js
import { dataPromise } from './getData.js';
const data = await dataPromise('someUrl');
是的,模块的顶层只会运行一次,不管它被导入了多少次。例如,您将看到,如果将console.log
语句放入模块中,该日志将只出现一次。
第一次导入模块时,将创建一个与该模块对应的命名空间对象,运行模块的顶层代码,并将模块的导出分配给该命名空间。当将来导入该模块时,只需再次引用已经存在的命名空间。