我在访问 javascript 函数或工作线程中的任何变量时遇到问题。我正在使用 WebWorker-thread nodejs 库来执行多线程。
var fs = require('fs');
var path = require('path');
var threadPool=Worker.createPool(5).all.eval(writeKeywordsToFile);
function getKeywords() {
var keywords = ["Restaurant", "Food", "Cusine"];
for (var i = 0; i < keywords.length; i++) {
threadPool.any.eval('writeKeywordsToFile(' + JSON.stringify(keywords[i]) + ',' + i + ',' + JSON.stringify(path.join(__dirname, '../', 'tmp/')) + ')', function (err, val) {
console.log(' [' + this.id + '] ---- >' + err);
});
//writeKeywordsToFile(keywords[i], i , path.join(__dirname, '../', 'tmp/'));
}
}
function writeKeywordsToFile(keywords, i, dirPath) {
if (keywords != undefined) {
var fileName = "Document_" + i + ".txt";
console.log(fileName);
var stream = fs.createWriteStream(dirPath + fileName, fs);
stream.once('open', function (fd) {
console.log('stream open');
stream.write(keywords + "\r\n");
stream.end();
});
}
return keywords;
}
getKeywords();
无法访问 fs 以创建流并写入文件。我如何访问 writeKeywordsToFile() 中的任何 javascript 函数或变量,有什么解决方法吗?
最佳答案
工作人员只能通过向原始范围发送消息或从该范围接收消息来与该范围进行通信。出于所有意图和目的,您应该将线程视为存在于其自己的单独范围中。我承认我的经验完全基于与实际的网络 worker 一起工作,所以我不确定这在多大程度上适用于基于 Node 的解决方案(尽管它应该适用,因为共享范围上的多线程会带来 hell 和你的代码该死)
因此,主线程中全局范围内的任何内容都不存在于其工作人员范围中......
如果你想用它做任何事情,你必须在工作线程中 require('fs') 。
关于javascript - Webwork-threads Nodejs 访问作用域外的函数/变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31401273/