我在访问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函数或变量,任何解决方法?
答案 0 :(得分:0)
工作人员只能通过向/从该范围发送/接收消息来与您的原始范围进行通信。对于所有意图和目的,您应该将一个线程视为生活在它自己的独立范围内。我承认我的经验完全基于与实际网络工作者合作,因此我不确定这对于基于节点的解决方案有多远(尽管它应该适用,因为对共享范围的多线程会引起地狱和诅咒你的代码)
因此,你在主线程中的全局范围内的任何东西都不存在于它的工作范围内......
如果你想对它做任何事情,你必须在工人中要求('fs')。