module.evaluate([options])
评估模块及其依赖。对应 ECMAScript 规范中 循环模块记录 的 Evaluate() 具体方法 字段。
【Evaluate the module and its depenendencies. Corresponds to the Evaluate() concrete method field of Cyclic Module Records in the ECMAScript specification.】
如果模块是 vm.SourceTextModule,必须在模块实例化后调用 evaluate();否则 evaluate() 将返回一个被拒绝的 Promise。
【If the module is a vm.SourceTextModule, evaluate() must be called after the module has been instantiated;
otherwise evaluate() will return a rejected promise.】
对于 vm.SourceTextModule,evaluate() 返回的 Promise 可能会同步或异步地被完成:
【For a vm.SourceTextModule, the promise returned by evaluate() may be fulfilled either
synchronously or asynchronously:】
- 如果
vm.SourceTextModule本身或其任何依赖中没有顶层await,则在模块及其所有依赖被评估后,Promise 将会 同步 地被完成。- 如果评估成功,该 Promise 将会同步解析为
undefined。 - 如果评估结果出现异常,该 promise 将会被 同步 拒绝,并携带导致评估失败的异常,这与
module.error相同。
- 如果评估成功,该 Promise 将会同步解析为
- 如果
vm.SourceTextModule本身或其任何依赖中包含顶层await,则该 Promise 将在模块及其所有依赖被评估后 异步 完成。- 如果评估成功,该 Promise 将被_异步_解析为
undefined。 - 如果评估结果导致异常,该承诺将被 异步 拒绝,并伴随导致评估失败的异常。
- 如果评估成功,该 Promise 将被_异步_解析为
如果该模块是 vm.SyntheticModule,evaluate() 总是返回一个同步完成的 promise,参见 评估()一个合成模块记录 的规范:
【If the module is a vm.SyntheticModule, evaluate() always returns a promise that fulfills synchronously, see
the specification of Evaluate() of a Synthetic Module Record:】
- 如果传递给其构造函数的
evaluateCallback同步抛出异常,则evaluate()会返回一个会被同步拒绝并带有该异常的 promise。 - 如果
evaluateCallback没有抛出异常,evaluate()会返回一个将会同步解析为undefined的 Promise。
vm.SyntheticModule 的 evaluateCallback 会在 evaluate() 调用中同步执行,其返回值会被丢弃。这意味着如果 evaluateCallback 是一个异步函数,evaluate() 返回的 Promise 不会反映其异步行为,并且异步 evaluateCallback 中的任何拒绝都会丢失。
【The evaluateCallback of a vm.SyntheticModule is executed synchronously within the evaluate() call, and its
return value is discarded. This means if evaluateCallback is an asynchronous function, the promise returned by
evaluate() will not reflect its asynchronous behavior, and any rejections from an asynchronous
evaluateCallback will be lost.】
evaluate() 在模块已经被评估之后也可以再次调用,在这种情况下:
- 如果初始评估成功结束(
module.status为'evaluated'),它将什么也不做,并返回一个解析为undefined的 Promise。 - 如果初始评估导致了异常(
module.status为'errored'),它将重新拒绝初始评估产生的异常。
在模块正在评估 (module.status 为 'evaluating') 时,无法调用此方法。
【This method cannot be called while the module is being evaluated (module.status is 'evaluating').】