Webwork-threads Nodejs访问范围外的函数/变量

时间:2015-07-14 08:13:05

标签: javascript node.js multithreading web-worker

我在访问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函数或变量,任何解决方法?

1 个答案:

答案 0 :(得分:0)

工作人员只能通过向/从该范围发送/接收消息来与您的原始范围进行通信。对于所有意图和目的,您应该将一个线程视为生活在它自己的独立范围内。我承认我的经验完全基于与实际网络工作者合作,因此我不确定这对于基于节点的解决方案有多远(尽管它应该适用,因为对共享范围的多线程会引起地狱和诅咒你的代码)

因此,你在主线程中的全局范围内的任何东西都不存在于它的工作范围内......

如果你想对它做任何事情,你必须在工人中要求('fs')。