Articles of 作用域

NodeJS MongoDB游标toArraycallback函数不会对父范围variables进行更改

MongoClient.connect(dburl, function (err, db) { var collections = []; db.listCollections().toArray(function (err, collInfos) { for (var i = 0; i < collInfos.length; i++) { collections[i] = collInfos[i].name; } console.log(collections); }); console.log(collections); }); 所以我想把我所有的数据库集合放到一个string数组中,这是我的一部分代码。 问题是, toArraycallback之外的console.log首先被执行并输出[] ,而toArraycallback中的console.log正确地输出数组。 在我看来,有一些范围问题,但我不熟悉NodeJS和MongoDB究竟如何。

在Node中从函数内部引用外部函数var

我想知道如何访问以下代码中的特定variables: 文件foo.js function a(id, callback) { //Do things if (err) { callback(err); } else { callback(null, result); } } function b(x, callback) { //Do things if (err) { callback(err); } else { callback(null, result); } } 文件question.js var id = 1; var x = 2; foo.a(id, function(err, result){ if (err) { //Do stuff } else […]

nodejs中的variables作用域

我刚开始使用nodeJS,并且在理解variables范围和引用时遇到一些困难。 例如,在下面的代码中,variablesa将会改变/被覆盖,即使切片被设置为variablesb。 我的问题是,如何将variablesa复制到variablesb中而不引用它/覆盖variablesa。 var a = ['a', 'b', 'c', 'd']; var b = a; b.splice(3,1); console.log(a) //will display ['a', 'b', 'c'] instead of ['a', 'b', 'c', 'd']

节点arrays范围问题

我觉得这是一个非常愚蠢的问题,但我很难理解为什么我在callback函数中看到奇怪的行为。 我定义了一个名为clientList的数组,我导出并在其他文件中使用。 这里的代码在客户端连接到我的服务器时运行。 当我说clientList.splice或clientList.push,一切都按预期工作,而clinetList数组反映了我在其他需要()它的文件中的变化。但是,如果我说直接分配ClientList(例如clientList = []),那么更改不会反映在其他文件中。 如果我在callback中打印ClientList的内容,则这种改变将以任何方式反映出来。 var clientList = []; module.exports.socketHandler = (socket) => { var client = new Client(socket); clientList.push(client); socket.on('end',function(){ clientList = [] //This does not change the exported array clientList.splice(0,1); //This does change the exported array console.log("Client connection ended: "+clientList.length); //This always changes }); } module.exports.clientList = clientList; //IN A DIFFERENT […]

节点的JS如何从一个函数的callback函数访问全局variables?

我正在使用NodeJS进行事件捕获。 所有的电话都将来到getmefunction。 从这个函数我打电话getUserLocation()函数返回基于IP地理定位。 如何根据这个值更新全局variables? var getClientAddress = function (req) { return (req.get('x-forwarded-for') || '').split(',')[0] || req.connection.remoteAddress; } var getClientLocation = function (ipaddress, callback) { freegeoip.getLocation(ipaddress, function(err, location) { if (err) throw err; return callback(location); }); } var store = [{'hello': 'world', 'country': 'India', 'City': 'Indupur'}]; for (eve=0;eve<store.length;eve++){ if(!store[eve].lat){ clientIp = getClientAddress(req); getClientLocation("XXX:XX:XX:XXX", function(resp) { console.log(resp); […]

存储一个类实例成员函数的引用使得它的范围变得松散

我正在使用节点v8.1.3 我在文件utility.js有一个类Utility class Utility { constructor() { this.typeChecker = require('javascript-type-checker'); this.internalErrors = require('../constants/internalErrors'); this.axios = require('axios'); this.config = require('../config'); } getCurrentWeatherByLatLong(latitude, longitude) { if(!this.isValidLatitude(latitude)) throw this.internalErrors.ERR_LAT_INVALID; if(!this.isValidLongitude(longitude)) throw this.internalErrors.ERR_LONG_INVALID; const url = `${this.config.BASE_URL}?appid=${this.config.API_KEY}&lat=${latitude}&lon=${longitude}`; return this.axios.default.get(url); } isValidLatitude(latitude) { return (this.typeChecker.isNumber(latitude) && latitude >= -90 && latitude <=90); } isValidLongitude(longitude) { return (this.typeChecker.isNumber(longitude) && longitude >= […]

Javascript:访问父母function的variables

我有以下代码(简化): function(req, res) { var path = 'login'; req.on('end', function(data) { var post = parsevars(rawpost, '&'); if (typeof post.username !== 'undefined' && typeof post.password !== 'undefined') { if (handlelogin(post.username, post.password)) path = req.url; } }); } 大胆的部分是没有按预期工作:/ 任何有关如何逃避这个范围限制的build议都会很棒。

函数内的nodejs中的variables范围

如何范围数据? 这里datat是空的。 我想把数据放在一个变种,所以我可以在函数外使用它。 var datat; twit.search('#louieck', {include_entities:true,page:paget,maxid:maxidt}, function(data) { // and output to the console: datat = data; }); sys.puts(sys.inspect(datat)); 问候 BUSSIERE

templateDatavariables返回未定义的帮助函数(docpad.coffeeconfiguration文件)

这是我的configuration文件 。 docpadConfig = { templateData: site: title: 'hello docpad' getTitle: -> @site.title getString: -> 'just a string' } # Export the DocPad Configuration module.exports = docpadConfig 当我做title= site.title时候,从一个玉石的布局,它呈现的确定。 当我尝试调用helper函数title= getTitle() ,控制台输出: error: An error occured: ReferenceError: /Volumes/Data/project/am/lab/docpad/hello_docpad/src/layouts/default.html.jade:21 19| 20| //- Our site title and description > 21| title= getTitle() 22| 23| //- Output DocPad […]

在javascript中返回不同范围之间的值

我是Javascript的新手,也是经验丰富的程序员,我正在努力地抓住最好的结构的模式和devise的概念,以build立应用程序时使用和方法。 一些领域对我来说相当新颖,一个是掌握Javascript的范围和closures。 所以为了让这个尽可能的干净,你们这些人,我已经附上了一个代码样本,希望有人可以把我的逻辑放在一个地方,给我一个指导思想和思考的权利。 我发布的代码是一个非常简单的文件系统/帮助程序库(Node.js,express)的一部分,用于扫描目录,在这些目录上运行一些条件,并返回结果作为地图维度数组到另一个库(不张贴)。 你看到的代码是我目前的“testing”条件。 我已经评论过了。 要点: https : //gist.github.com/jimmiehansson/6235613 (全视图或代码/库) 示例代码块(在返回值时出现问题) ApiFS.prototype.scan = function(){ var self = this; var b; fs.readdir(stgs.fsPath, function(err,folders){ if(folders.length<1) { console.log(errLog.fsEmpty); return; } rslt = self.walk(folders); rslt.forEach(function(itm){ if(!self.exclusion(rslt)){ b=self.loader(stgs.fsPath,itm); } }); }, ioResponse); console.log(b); // undefined <—- } 那么足够的破冰。 我最大的问题: 无论我做什么,范围(吊装)和相当小的封闭都妨碍我。 我目前不使用吸气剂或二聚物,因为我根本不知道该怎么做? 我的逻辑完全失效,还是缺less一些相当重要的东西? 在代码中,您将看到scan()原型函数对每个返回true / false值或数组的函数“helper”进行一次调用。 我可以简单地通过返回值到主扫描()函数,但我不能为我的生活从fs.readdir()函数返回的值返回范围外,例如ioResponsecallback之外。 什么是我的逻辑错过了,我怎么能更好地处理这个问题(即使这意味着重build每一件事情)我担心,我正在做一些非常错误的devise和布局这些函数的方法,以及如何处理它们之间的值。 任何援助非常感谢!