// 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();