Tag: asynchronous

testing一个Node.js函数,它的返回值可以根据执行asynchronous操作的时间而改变

我正在为node-redis模块编写一个模拟器,并使用Jasmine来testing它。 我为Redis命令的各个方面编写testing,我的意图是能够对原始Redis模块运行testing。 我的问题是: 如果我正确理解node-redis , node-redis的asynchronous函数的返回值是不同的,这取决于命令发送到Redis或排队等待稍后发送(例如,在连接完成后发送)。 但是我也想testing返回值,如果我写一个如下所示的testing: it("should update value", function () { var client = redis.createClient(); client.set("key", "1st"); var value = client.get("key", function (err, data) { expect(err).toBeNull(); expect(data).toBe("1st"); }); expect(value).toBe(true); }); 如果使用真正的Redis模块,它将不会通过,因为没有足够的时间连接到数据库。 有没有办法等待asynchronous请求被执行以继续testing代码? (对这个问题采取不同的解决方法也是受欢迎的。)

使用node.js和django一起使用stream式web API

我正在尝试编写一个将使用twitter的streamapi的django应用程序。 显然,它不能像django那样完成,因为调用Twitter将被阻止。 因此,我需要做一个asynchronous调用Twitter。 这使我认为这是一个尝试node.js的好机会。 从我所听到的node.js来看,这似乎是进行这种asynchronous调用的理想select。 有人可以告诉我如何可以集成django和node.js,使所有阻止的web api调用可以完成使用节点和web开发的所有其他方面可以使用django处理。

Node.jsasynchronousvideo转换慢

我写了一个小网站/服务,它可以从一个网站(目前Youtube)下载一个video,并将其转换为一个mp3文件,并将其作为响应发回。 例如,当您请求http:// localhost:8000 / v = http://www.youtube.com/watch?v = HhoewflkQu0时 ,它会下载此video并响应以MP3编码的audio层。 这一切工作得很好,我的问题是,这是非常缓慢的,我不明白为什么。 简化脚本的行为如下: 下载video并将其写入ffmpeg的stdin,然后stdout转到响应。 video(MP4,FLV) – > FFMPEG – > MP3 我用curl找出脚本有多快: $ curl http://localhost:8000/v=http://www.youtube.com/watch?v=HhoewflkQu0 我只得到约5-10K。 那为什么这么慢呢? 我从中下载video的服务器很慢。 转换很慢(因为CPU速度很慢)。 node.js – > FFMPEG之间的数据传输很慢。 我试图下载一个正常的下载pipe理器的video,我得到了约320k,这是我的正常下载速度,所以第一点不是瓶颈。 到了第二点和第三点,我试图写一个本地文件到标准input,我得到了大约60万,所以不是这样。 那么为什么我的脚本太慢了,我能做些什么来使其更快? https://gist.github.com/1304637 提前致谢。

我对节点中的“非阻塞”的理解是否正确?

人们有时会把下面的callback模式称为asynchronous。 function beAsync(msg, cb){ cb(msg); } beAsync("a", function(msg){ console.log(msg); }); console.log("b"); 什么人有时会说beAsync允许其余的代码运行,然后callback发生在准备就绪时。 当我最初调用beAsync和真正的asynchronous函数(如fs.readFile ,必须有一些代码同步运行, 然后发生了一些事情 ,允许readFile代码允许其余的代码被允许运行。 我正确地说,代表callback的东西进入一个低于JavaScript的循环吗? 所以beAsync的修改将包括一个setTimeout。 function beAsync(msg, cb){ setTimeout( function(){ cb(msg) }, 1); } 所以setTimeout和readFile的内部可以讲一个JavaScript所在的层? 说到这个低层是在JavaScript中实现非阻塞代码的唯一方法?

Javascript和女孩的callback – 两个问题

我刚刚冒险进入服务器端JavaScript的美妙世界,我仍然得到了asynchronous处理的窍门。 在搞了一个节点项目之后,我意识到这个javascript就像我以前的很多女朋友 – 他们不会callback。 无论如何,我希望有人能帮助我…这里的代码与下面的解释: //this is the function I'm calling to function queryDb(connection, sql){ connect(connection, function(){ connection.query(sql, function(err, results){ if(!err){ return results; end(connection); } else{ throw err; } }); }); } 这是我打电话的地方。 在调用之后,我想要执行一些代码,但是直到这个函数完成处理(实际上是对数据库的查询,所以需要更长的时间,而我的js只是继续前进)。 var queryResults = db.queryDb(db.connection, "SELECT * FROM Clients"); if(queryResults){ console.log(queryResults); req.dbResults = queryResults; next(); } else{ console.log('The query results where not […]

通过node.js完成对Mongodb的asynchronous请求

在呈现页面之前,我必须向MongoDB发出几个请求。 这里是我现在怎么做(db.js是我的数据库处理层): db.findUser(objid, function(result1){ db.findAuthor(objid, function(result2){ db.findSmthElse (objid, function(result3){ res.render('template', { user: result1, author: result2, smthelse: result2 }); }); }); }); 我认为这样的方法杀死了asynchronous的想法。 不过,只有在处理完所有请求之后,我才需要调用res.render。 如何启动它的asynchronous? 我应该使用asynchronous库,因为这里build议: nodejs中多个asynchronousmongo请求还是有更多合适的解决scheme吗? 谢谢。

pipe理node-postgres查询

我已经阅读了node-postgres的API文档。 它build议我们使用pg对象来创build池式客户端。 而在pg.connect API文件中说: connect方法从客户端池中检索客户端,或者如果所有共用客户端都忙且池未满,则connect方法将创build一个新的客户端,将其第一个参数直接传递给客户端构造函数。 所以根据这个build议,使用pg.connect意味着“使用pg对象来创build池客户端”? 如果不是,那实际上是什么意思? 在我的实现示例中,我在我的路线中做了几个查询: app.get('/post', function(req, res) { pg.connect(dbconfig, function(err, client, done) { client.query('SELECT * FROM post', function(err, result) { res.render('post/list', { posts: result.rows }); }); }); }); app.get('/post/new', function(req, res) { res.render('post/new'); }); app.post('/api/v1/post', function(req, res) { var b = req.body; pg.connect(dbconfig, function(err, client, done) { client.query('INSERT INTO post (title, […]

Javascript对象 – 从整体对象缺less的function,但存在

奇怪的问题在这里。 我正在运行Node / Express / Mongoose / Leaflet。 我从我的数据库中拉出一个位置数组,一旦callback启动,我遍历这些位置,以find一堆string通道,处理每个位置。 然后,我尝试追加到每个位置对象的段落数组,然后将位置数组附加到GeoJSON FeatureCollection。 Location.find({}, { _id: 0 }, function (err, locations) { if (err) { console.log('DB Error loading all locations'); res.redirect('/'); } else { var num = 0; console.log("Beginning finding all passages"); locations.forEach(function (location) { num++; console.log("Looking up a location"); Passage.find({"placekey": location.properties.placekey}, function (err, passages) { if […]

在Node.js中同步运行一个asynchronous的基于stream的函数

我正在为Browserify创build一个用于Mincer的引擎。 Mincer是同步的。 模板通过调用Template#evaluate来呈现,这需要编译后的模板在函数结束时返回。 Browserify v2是asynchronous的。 这可能吗? 请注意:控制stream程库,光纤等将不起作用。 我正在看的解决scheme是使用execSync来与browserify cli util配合使用。 如果可能,我宁愿以编程方式执行此操作。 干杯! 更新:现在使用shelljs 。

Node.js:res.redirect(“back”)得到错误('不能在发送之后设置头部')。

我有一个express.js应用程序的一个小问题。 在使用callback进行多个操作后,无法重新导向。 我的应用程序使用名为“标记”的对象,并按“子类别”进行评分。这些操作的目标是合并2个或更多个子类别,将所有标记从旧类别移动到新子类别,最后删除旧的子类别。 这里是代码: 检查2个或更多子类别后调用的操作: exports.postMergeSubCategories = function(req, res) { "use strict"; var data = {}; data.subCategories = req.body.subCategoriesChecked; data.enName = req.body.subCategory.enName; data.frName = req.body.subCategory.frName; data.deName = req.body.subCategory.deName; if (data.subCategories.length > 1) { sscategoryMapper.merge(data, function(err, sscategory) { if (err) return console.log(err); console.log ('Sub categories merged !'); req.flash('mergeMessage', 'Merge completed!'); res.redirect("back"); }); } else { // […]