导入的函数将无法在节点工作线程中工作,因为未加载依赖关系图
An imported function won't work in a Node Worker Thread because the dependency graph isn't loaded
我正在尝试通过 node-worker-threads-pool
(包装器)包及其 DynamicPool
.[=20= 来使用 Node 的 worker_threads
]
我的问题是,执行一个提供具有 import
的函数的线程将无法工作,因为该函数将是 undefined
.
// moduleA.js
import xyz from './xyz.js'
const f = x => {
xyz () //<-- f is undefined
}
export default f
// moduleB.js
import f from './moduleA.js'
f (1) //
// moduleC.js
const x = await pool.exec ({
task: f
})
这是 node-worker-threads-pool
或 Node 的 worker_threads
的特定问题吗?您知道解决此问题的方法吗?
看来是the library的限制,与模块无关:
Notice: If task
is a function, you can not use closure in it! If you do want to use external data in the function, you can use workerData to pass some cloneable data.
这听起来很像是他们正在将函数字符串化并仅从该代码创建一个 worker。
改为使用工作文件。
我正在尝试通过 node-worker-threads-pool
(包装器)包及其 DynamicPool
.[=20= 来使用 Node 的 worker_threads
]
我的问题是,执行一个提供具有 import
的函数的线程将无法工作,因为该函数将是 undefined
.
// moduleA.js
import xyz from './xyz.js'
const f = x => {
xyz () //<-- f is undefined
}
export default f
// moduleB.js
import f from './moduleA.js'
f (1) //
// moduleC.js
const x = await pool.exec ({
task: f
})
这是 node-worker-threads-pool
或 Node 的 worker_threads
的特定问题吗?您知道解决此问题的方法吗?
看来是the library的限制,与模块无关:
Notice: If
task
is a function, you can not use closure in it! If you do want to use external data in the function, you can use workerData to pass some cloneable data.
这听起来很像是他们正在将函数字符串化并仅从该代码创建一个 worker。
改为使用工作文件。