Articles of asynchronous

Mongodbasynchronous获取结果

这是我的行动,将从用户收集所有用户 app.post('/login', function(req,res,next){ users = self._db.get('users', {}) }) 这是我在数据库类中的function this.get = function( col, opt ) { var result = [], opt = opt || {}; query = db.collection(col).find( opt ); query.each( function(err, doc) { console.log( doc ); if( doc != null ) { result.push( doc ); } }); return result; }; 当我login用户对象它返回空数组,但是当我logging每个文件内function它成功的工作 问题是我怎样才能得到asynchronous的结果?

从asynchronous请求循环获取值

我试图编写一个nodejs程序,查询github的回购列表(通过github API的节点封装: https ://www.npmjs.com/package/github),并检索数组中的git克隆url,然后我希望按字母顺序sorting。 由于调用的asynchronous性质,我不知道如何等待,直到所有的asynchronous请求返回? 这里是问题的循环。 repoArray是[username / reponame]格式的数据库 var urls = []; for (var i=0; i < repoArray.length; i++) { var components = repoArray[i].split('/'); github.repos.get({ user: components[0], repo: components[1] }, function(err, res) { urls.push(res.ssh_url); }); } // do a case-insensitive sort urls.sort(function(a,b) { return a.localeCompare(b, 'en', {'sensitivity': 'base'}); }); console.log("urls: " + urls); 基本上,因为在循环中的github.repos.get()调用都是基于asynchronous/基于callback的,所以当代码到达urls.sort(),然后是console.log()时,没有一个或一些github.repos.get […]

如何使一些同步代码在其他asynchronous代码之前运行?

我有这样的function: var download = function(url, name) { http.get(url, function(response) { // part1 : create a new folder if it doesn't exist dir = './name'; if (!fs.existsSync(dir)){ fs.mkdirSync(dir); } // part 2: download and save file into that folder response.on('data', function (data) { fs.appendFileSync(dir, data); }); }) } 我希望第1部分在第2部分运行之前完成(这样我可以为第2部分指定目录)。 我怎样才能做到这一点 ? (在上面的代码中,就我所知(到目前为止,我是node.js的新手),两个部分将同时运行,所以我不确定部分1会在部分2运行之前总是完成)。

NodeJSasynchronous和recursion

我已经广泛search,找不到似乎工作的答案。 我试过Q.deferred,async.series,async.each,我似乎无法得到这个吸盘工作: 这里是代码,这是有效的,但是,在recursion完成之前,“return subTree”会引发“树”导出。 我已经validation了recursion正在挖掘适当的。 我真的需要relaiveChildren的回报,等到recursion调用完成。 exports.tree = function(req, res) { var tree = { 'name': 'New Account' }; var methods = {}; methods.recursiveChildren = function(path) { var subTree = { 'name': path.field.label+":"+path.match+":"+path.value, 'id': path._id, 'parent': path.parent, 'children': [] } Path.find({parent:path._id}).sort({date_created:1}).exec(function (err,childpaths) { for ( var z in childpaths ) { var tmpTree = methods.recursiveChildren(childpaths[z]); […]

asynchronous函数导致模块初始化

假设这个简单的模块: var mongoose = require('mongoose-util'); mongoose.myOwnCreateConnection(function(err, connection) { if(err) { console.log('log error somehow and make it die'); module.exports = null; } else { module.exports = connection; } }); 它不会明显工作,但如何pipe理上下文模块初始化中的调用? 这里最好的做法是什么? 我只需要在模块init中使用函数声明吗? 提前致谢。 我问,因为快递有应用程序模块,一切都初始化。

无法在Node / Javascript中链接HTTP请求

我正在尝试重新创build一个我在Node / js中编写的Python脚本,而且我无法用asynchronous/callback的方式来包装我的头。 该脚本相当简单,并使用两个基本的HTTP请求到eBay的API。 第一个请求获取结果项目ID的列表,然后第二个请求获取每个项目的具体信息(描述/列表信息等)。 在Python中,这非常简单,我使用了一个简单的循环。 这不是很快,但它的工作。 然而,在JavaScript中,我正在努力获得相同的function。 我现在的代码如下: var ebay = require('ebay-api'); var params ={}; params.keywords = ["pS4"]; var pages = 2; var perPage = 2; ebay.paginateGetRequest({ serviceName: 'FindingService', opType: 'findItemsAdvanced', appId: '', params: params, pages: pages, perPage: perPage, parser: ebay.parseItemsFromResponse }, function allItemsCallback(error,items){ if(error) throw error; console.log('FOUND', items.length, 'items from', pages, 'pages'); for […]

数百个坐标之间的Nodejs距离计算阻塞了我的服务器

我有一个数百个坐标(lat,lon)的列表。 对于每个客户端请求,我需要计算每对这些点之间的距离。 对于1000个坐标的列表 – 这需要我500毫秒,所以它阻止我的nodejs服务器。 我怎样才能修复这个asynchronous? 我不希望它阻止我的服务器,所以它可以继续处理其他请求.. build议打开另一个nodejs进程,并将其设置为“距离计算服务”或类似的东西? 以下是一个示例testing代码: var pts=[]; for (i=0;i<1000;i++){ pts.push(randomLatLon()); } var a; var b; var i,j; var start = new Date(); for (i=0;i<pts.length;i++){ for (j=0;j<pts.length;j++){ if (i===j) { continue; } a = pts[i]; b = pts[j]; var dist = utils.getDistance(a.lat,a.lon,b.lat,b.lon); } } console.log('total time',new Date()-start,'ms'); // ~500 ms 这里是utils.getDistance函数: E.getDistance […]

NodeJS async.parallel成功被调用两次?

看我的代码 router.get('/:productSlug', function(req, res, next) { async.parallel({ product: function(callback) { products.single(callback, req,res,next) } }, function(err, results){ console.log('HERE'); console.log(results.product.rows[0]); res.render('product', {product : results.product.rows[0]}); }); }); 我的控制台输出如下 HERE { name: 'Test Product', price: '19.99' } GET /img/logo.png 304 9.127 ms – – GET /img/social/share.png 304 2.051 ms – – GET /img/social/tweet.png 304 2.190 ms – – HERE […]

在globals.js中注释asynchronous不会影响其在服务中的使用

有人可以给我一些关于sails.js中的globals.js的小技巧,我有下面的问题。 我在globals.js中评论为asynchronous,我已经删除了安装在我的项目中的asynchronous模块,现在在一个服务中,我评论了一行// var async = require('async'); 我的代码仍然有效,我曾经使用过asynchronous,我是新的风帆和探索使用globals.js,就像是如果async被评论任何用法应该抛出一个错误“未定义”。 如何将我自己的模块添加到globals.js? bootsrap.js与global.js有什么不同? 感谢您的讨论和解释。 谢谢

当操作完成时发送“响应”

我正在使用Express来build立一堆基于POST请求正文的文件。 每当应用程序收到一个POST Request ,它将调用一些长时间运行的函数来生成这些文件: app.post('/test', function(req, res) { buildMyFiles(req.body); // making files res.send('got the post'); }); 我不想发送任何回应,直到所有的文件被创build。 我怎么能做到这一点?