Articles of closures

节点jsclosures需要推送到数组

我有一个问题,我的代码不会返回已经推入数据的数组,我昨天晚上想出了关于闭包的事情,我研究了它们,但是我没有真正得到它们。 所有的例子都使用addeventlistener。 我知道我不得不等待,直到我推完成,因为这是asynchronous。 app.post("/search", function(req, res){ var test = [] for (var key in req.body.movie){ Movie.find({title: "Gotham"}, function(err, foundMovie){ test.push(foundMovie) }) } console.log(test) res.render("index") });

JavaScript / node.js从模型中获取数据

我百分之百确定必须有一些简单的答案,但今天我吮吸谷歌search。 代码中的问题。 async.waterfall([ function(callback){ callback(null, 'some value..'); } ], function (err, result) { // how do I get result outside of this block? } ); 如果我在这个块的外面设置了一个variables,并试图给它赋值“结果”,那么由于JavaScript范围的性质,它不会出现在块之外。 谢谢!

为callback添加额外的参数

所以在阅读之后,我发现我需要一个闭包或者使用bind,但是我不完全清楚正确的语法和我应该使用的。 我使用https://github.com/rsms/node-imagemagick中的imagemagick模块,并且需要将文件名传递给resizecallback。 语法是: var filename = 'myfile.jpeg'; im.resize(options, callback(err, stdout, stderr)) 现在我想我的callback接受额外的参数,如文件名。 我想能够调用另一个函数,并有3个callback参数的文件名(还要注意,这是在一个循环,所以文件名是从一个数组 – 不知道是否重要) 所以我有一个callback函数: var callback = function(err, stdout, stderr) { //how do I access filename? } 我可以得到一个解释,我应该使用(封闭或绑定)和优点/缺点,如果封闭,我将如何实际编写callback函数 – 我不清楚如何访问err,stdout和stderr的方式。

如何通过JavaScript下载PDF文件?

我的JavaScript代码向我的node.js服务器发出以下AJAX请求: var url = '/node/download'; var downloadRequest = new goog.net.XhrIo(); downloadRequest.headers.set('content-type', 'application/json'); downloadRequest.send(url); 我的node.js服务器在节点上创build一个pdf,并通过下面的代码将pdf传回客户端: var filestream = fs.createReadStream(pdfpath); res.writeHead(200, { 'Content-disposition': 'attachment; filename=' + filename, "Content-Type":"application/pdf","Content-Transfer-Encoding": "binary"}); filestream.on('data', function(chunk) { res.write(chunk); }); filestream.on('end', function() { res.end(); }); 但是现在我在如何在javascript客户端接收这个响应时遇到了麻烦,所以下载提示会打开,允许用户下载并保存pdf文件。 请帮忙! 感谢提前! PS Plz也build议任何更好的方法来实现我的节点的代码(如果有的话) 编辑:一个可能的解决办法是发送我的要求是这样的: window.location.assign('/node/download'); 这样我得到下载提示,一切正常,除了牺牲了产品的asynchronous性质。 有没有解决这个问题,这样我还可以保持asynchronous?

如何捕捉私有variables

在运行这个代码(在nodejs中),“Count”对大数值“count”运行为负值。 谁是罪魁祸首,“数”还是“连锁”? 写入'flood'函数的正确方法是什么,以便在setTimeout()之后调度下一个调用。 flood = function( count) { chain = function() { –count; console.log("Count " + count) if( count > 0 ) { setTimeout(chain, 1); } }; chain(); } runit = function (count,par) { console.log("RUNIT: " + count + " , " + par ) for( var i = 0 ; i < par ; […]

回拨成为closures吗?

function fn(args){ var a= 'something'; doSomething('dummy',function(){ }); } fn(); 在这段代码中,是匿名callback变成了closures还是只是在执行后退出? 如果它变成了一个闭包,我如何取回内存,因为它总是可以访问fn的激活对象。

我是否需要closures每个具有等待结果callback的方法?

我正在使用socket.io和MySQL数据库工作在一个nodejs服务器上,当我意识到数据在数据库检索速度缓慢的任何时候都可能改变。 比方说,例如,在每个套接字连接上,我想在发送X数据时查询数据库中的用户信息。 io.on('connection', function(socket) { console.log('User connected'); socket.on('fetchTable', function(data) { var number = data.number; database.getTable(number, function(error, result) { // We'll take it that result is constant for both: 1 socket.emit('fetchTableResult', result + number); }); }); }); 如果2个用户同时连接(用户1的编号为1,用户2的编号为2),则用户1 在用户2 之前请求数据库,但是对于用户1和处理的用户2的数据 ,数据库要返回的结果太慢第一 。 返回的数据会不同吗? 这两个用户都会得到'3'作为'fetchTableResult'数据吗? 现在套接字不会是用户2的套接字吗? 解? io.on('connection', function(socket) { console.log('User connected'); socket.on('fetchTable', function(data) { var number […]

Javascript只运行一半的循环

我正在使用Node.js,我有一个循环,看起来像这样: var request = require('request'); for(var i = 0; i< some_number; i++){ console.log(i); request( url.concat(i), function(error, response, body){ if(!error){console.log("ABC" + i)} else{ console.log(error); }); } 并在运行request之前返回0到some_number-1 ,我不知道发生了什么事情。 我正在使用请求模块 。

以下nodejs代码之间的差异

第一个代码 net.createServer(function(socket){ socket.on('data',function(id){ getUserDetails(function(){console.log(id)}); }); }); function getUserDetails(next){ next(); } 第二个代码 net.createServer(function(socket){ socket.on('data',function(id){ getUserDetails(function(){console.log(id)}); }); }); function getUserDetails(next){ console.log(id); next(); } 第一个代码logging第二个代码给出错误的地方。 我明白,getUserDetails有没有访问身份证,但如何传递给getUserDetails有权访问ID的callback?

在WebStorm文件夹中closures所有的js文件

我正在使用WebStorm File Watcher和Google闭包编译器来缩小我的JavaScript文件。 我正在使用node.js v4.6。 WebStorm的文件监视器的问题是,我必须手动对JavaScript文件进行一些更改才能触发缩小操作。 如果我有很多JavaScript文件,这太乏味了。 我将不得不一一做。 我如何运行一个单一的操作来缩小位于特定文件夹中的所有文件?