表达式调用不再起作用了?"/>
NodeJS 中的顶级异步函数表达式调用不再起作用了?
我有一个 NodeJS 模块,用作服务器,在顶层调用异步函数表达式:
...
(async function func() {
await sleep(180000);
// do some stuff
})();
...
globalThis.sleep = function sleep(time) {
return new Promise(r => setTimeout(r, time));
};
...
当我在 NodeJS 19.9.0 版本中运行它时,它没有任何问题。然而,我今天刚刚更新到 20.2.0 版,现在它给了我这个:
TypeError: (intermediate value)(...) is not a function
at Object.<anonymous> (exec.js:59:3)
at Module._compile (node:internal/modules/cjs/loader:1255:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1309:10)
at Module.load (node:internal/modules/cjs/loader:1113:32)
at Module._load (node:internal/modules/cjs/loader:960:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:83:12)
at node:internal/main/run_main_module:23:47
奇怪的是,当我在函数调用之前放置一个
console.log("dummy message");
时,它会立即调用该函数,没有 Promise 微任务(并为 ReferenceError
函数抛出一个 sleep()
)。我尝试将函数包装在 console.log()
中而不是调用它,果然,它说 [AsyncFunction func]
。我尝试降级回 19.9.0 版本,但它仍然有同样的问题。出了什么问题,我该如何解决?
操作系统:Linux 6.3.2-arch1-1
使用 Arch Linux 的 Pacman
这段代码 should 在所有版本的 Node 中做的是如您所描述的那样抛出 ReferenceError,因为您在分配它之前尝试使用
globalThis.sleep
。
我的猜测是你在异步函数之前的行中省略了一个分号,所以它周围的括号被解释为以异步函数作为参数的函数调用。这可以解释为什么在获得正确的(ReferenceError-throwing)行为之前添加一个以分号结束的代码行。您需要修复它和 ReferenceError 才能使此代码正常工作。
更多推荐
NodeJS 中的顶级异步函数表达式调用不再起作用了?
发布评论