首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Webwork-线程Nodejs访问函数/变量超出作用域

Webwork-线程Nodejs访问函数/变量超出作用域
EN

Stack Overflow用户
提问于 2015-07-14 16:13:05
回答 1查看 461关注 0票数 0

我在访问javascript函数或worker线程中的任何变量时遇到了问题。我正在使用WebWorker-thread nodejs库来执行多线程。

代码语言:javascript
复制
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();

无法访问文件系统以创建数据流和写入文件。如何在writeKeywordsToFile()中访问任何javascript函数或变量,任何解决方法?

EN

回答 1

Stack Overflow用户

发布于 2015-07-14 16:26:53

工作人员只能通过向原始作用域发送消息/从该作用域接收消息来与该作用域进行通信。无论出于何种意图和目的,您都应该将线程视为生活在它自己的单独作用域中。我承认我的经验完全是基于实际的网络工作者,所以我不确定这在多大程度上适用于你的基于节点的解决方案(尽管它应该适用,因为共享作用域上的多线程会给你的代码带来地狱和诅咒)

因此,你在主线程的全局作用域中得到的任何东西都不存在于它的worker作用域中……

如果你想对它做任何事情,你必须在worker中使用(‘fs’)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31401273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档