Tag: closures

尝试遍历一个数组并为每个数组添加一个get函数

我想遍历样式标签,并为每个写一个GET函数。 问题是GET函数正在写入'styleTags [i]'的引用,而不是将'styleTags [i]'转换为适当的标签。 var styleTags = ['cont', 'ecce']; for (var i = 0; i < styleTags.length; i++) { app.get('/photos-' + styleTags[i], selectNav, function(req, res) { getDynPhotos(req, res, styleTags[i]); }); }

如何避免深入嵌套在nodejstesting?

你会介意分享你的testingnodejs的最佳做法吗? 什么是你的经验,以避免深嵌套? 编写testing时,无法弄清楚如何重构这段代码来closures它。 describe('ProcessRawData', function(){ describe('event that has been already handled', function(){ beforeEach(function(done){ store.testMode(true); var filename = __dirname + '/data/test.txt'; fs.readFile(filename, 'utf8', function(err, rawData) { prd.process(rawData, function(err, data){ var rawMsgSha1 = '123464fbcb34c333f4300a88f019f43e7de757d6'; store.sismember('events:handled', rawMsgSha1, function(err, exists){ if (err) throw err; assert.ok(exists); done(); }); }); }); })

Javascript / NodeJS:通过对象似乎覆盖“自我” – closures问题?

我的第一个Stackoverflow问题(我记得)。 经过多年的实践,我正在慢慢地重新开发开发Node和Javascript。 我希望这真的很简单,但我不明白我做错了什么。 我有一个相当简单的JavaScript对象的2个实例。 当我把这个对象的一个​​实例传递给另一个函数的时候,它会掉下来。 我第一次提到一个“自我”的价值很好。 然后我调用传入的对象上的函数。 如果我以后再尝试引用“自我”,看起来“自我”被传入的对象覆盖了。 这是对象来源: "use strict"; //simple object module.exports.SimpleObject = function SimpleObject(inputName) { try{ var self = this; //closure so we don't lose this reference in callbacks self.name = inputName; } catch(err) { console.log('Unable to create SimpleObject: '+err); } SimpleObject.prototype.getName = function() { self = this; return self.name; } SimpleObject.prototype.nestedOverwrite […]

Node.js:asynchronous代码+ jsclosures的麻烦

我无法适应Node的单线程+asynchronous性,再加上javascript的函数闭包。 假设我有这样的东西: function foo(bar) { someAsyncFunction(function callback(err) { // do stuff with 'bar' }); } 请让我知道,如果我失去了一些东西; 但我的理解是: 由于closures, callback会有一个参考 bar 但是,如果在bar = 20时调用foo一次,那么在第一次调用callback 之前再次使用bar = 42 ,那么bar在第一次调用foo callback中将是42。 换一种说法: foo(20) #1 someAsyncFunction(function callback() {}) #1 foo(42) #2 someAsyncFunction(function callback() {}) #2 callback() #1 ——->使用bar = 42 callback() #2 ——->使用bar = 42 我纠正这个吗? (如果bar是原始对象还是对象,这是否重要?)。 如果是这样,我可以做些什么来确保callback使用正确的值的bar (ASIDE从传递bar一直向下和调用堆栈)? […]

node.js:循环中的闭包

我无法得到closures的挂钩。 一个非常简单的例子: var array = [1,2,3]; var test = [0,0]; var result = []; for (var i=1; i<=array.length; i++){ test[1] = i; result.push(test); } console.log(result); 如果我只是把“我”推到结果中,它输出“1,2,3”,但上面的方法总是得到“[0,3],[0,3] [0,3]”。 这是为什么? 我已经阅读了关于闭包的一些解释,但是我似乎不理解这个系统,这使得我很难在代码中发现更多的错误。 是不是有一个更简单的方法来解决上面的问题,而不是使用函数内的函数(这似乎是解决我所发现的每一个相同的问题)?

是否有可能得到一个需要的文件不同的范围?

假设我有这个名为import.js的示例文件 var self; function Test(a,b){ this.a = a; this.b = b; self = this; } Test.prototype.run = function(){ console.log(self.a, self.b) } module.exports = Test 当我需要这个文件并创build一个新的“对象”时,所有的东西都可以正常工作,但是当我创build第二个对象时,它们都可以访问自己,只有后者才能工作。 var Test = require('./import.js'); var one = new Test(1,2); one.run() 1 2 var two = new Test(3,4); two.run() 3 4 one.run() 3 4 有没有办法重新需要文件,使其创build单独的范围? 把它作为两个不同的variables是行不通的, var Test1 = require('./import') var […]

困惑于一个Javascriptclosures的情况

我正在使用node-mongodb驱动程序编写一些node.js代码。 我决定caching集合对象,当我得到他们这样的: var db = connectionObject; function getCollection(collectionName) { return function(callback) { var cache; if (cache) return callback(null, cache); db.collection(collectionName, function(err, collection) { return err ? callback(err) : callback(null, cache = collection); }); } } var usersCollection = getCollection('users'); usersCollection(function(err, collection) { collection.find({}); // Rest of code here … }); usersCollection函数的重复调用应该使用caching的集合对象,不同之处在于cachingvariables总是未定义的。 更改代码来解决这个问题: return function(callback) { […]

如何正确closuresMongo(在副本集)没有数据库closures?

我的服务器设置是这样的: 2个服务器。 mongoDB在两台服务器之间都有副本集。 每个都是一个节点。 然后我有我的node.js服务器连接到MongoDB。 发生什么事情是..当我杀死辅助服务器。 (closures服务器)。 主要的MongoDB依然在运行,但Node.js服务器与MongoDB有连接问题。 即使我添加了服务器,它没有工作。 我使用mongoose和连接mongo。 所以发生了什么事? 如何正确closuresMongo节点?

闭包&asynchronousnode.jsfunction

所有, 尝试让我的头在一个node.js上下文(asynchronous调用)closures。 我有以下代码: timer = setInterval(pollOID, 1000); function pollOID() { for (channel in channels) { session.get({ oid: channels[channel].oid }, function (varbinds) { console.log("The " + channels[channel].name + " is " + varbinds); }); } } 该代码每秒轮询一次路由器的SNMP数据,使用setIntervalcallback中的循环来查询路由器的几个SNMP实体。 session.get函数有一个asynchronouscallback来处理来自路由器的结果。 SNMP位工作正常,我的问题是关于如何在会话asynchronouscallback内持续循环variables通道的值。 我得到以下结果: The Download Attenuation is 7.5 The Download Attenuation is 361600 The Download Attenuation is 60 因此,循环variables通道正在改变每个调用session.get,因为函数从路由器返回正确的值。 […]

关于node.jscallback中的'this'

可能重复: JavaScript“这个”关键字 我对node.js中用于EventEmitter的callback有些困惑。 var events = require("events"); function myObject() { this.name = "Test Object"; this.x = 99; this.y = 100; } myObject.prototype = new events.EventEmitter(); var myobject = new myObject(); myobject.addListener('dbg1', function() { console.log("this.name = " + this.name); //this.name gives the name not undefined console.log("myobject.name = " + myobject.name); //so does this }); myobject.emit('dbg1'); 为什么在callback里面提到myobject […]