// db.mjs
export const connection = await createConnection();
// server.mjs
import { connection } from ‘。/db.mjs’;
server.start();
在此示例中,在server.mjs中完成连接之前不会执行任何操作db.mjs。
现在,此特性可在最新版本的 Chrome中使用。
七、WeakRef
一般来说,在 JavaScript 中,对象的引用是强保留的,这意味着只要持有对象的引用,它就不会被垃圾回收。
const ref = { x: 42, y: 51 };
// 只要我们访问 ref 对象(或者任何其他引用指向该对象),这个对象就不会被垃圾回收
目前在 Javascript 中,WeakMap 和 WeakSet 是弱引用对象的唯一方法:将对象作为键添加到 WeakMap 或 WeakSet 中,是不会阻止它被垃圾回收的。
const wm = new WeakMap();
{
const ref = {};
const metaData = ‘foo’;
wm.set(ref, metaData);
wm.get(ref);
// 返回 metaData
}
// 在这个块范围内,我们已经没有对 ref 对象的引用。
// 因此,虽然它是 wm 中的键,我们仍然可以访问,但是它能够被垃圾回收。
const ws = new WeakSet();
ws.add(ref);
ws.has(ref);// 返回 true
JavaScript 的 WeakMap 并不是真正意义上的弱引用:实际上,只要键仍然存活,它就强引用其内容。WeakMap 仅在键被垃圾回收之后,才弱引用它的内容。
WeakRef 是一个更高级的 API,它提供了真正的弱引用,Weakref 实例具有一个方法 deref,该方法返回被引用的原始对象,如果原始对象已被收集,则返回undefined对象。
const cache = new Map();
const setValue = (key, obj) =》 {
cache.set(key, new WeakRef(obj));
};
const getValue = (key) =》 {
const ref = cache.get(key);
if (ref) {
return ref.deref();