Articles of asynchronous

Node.js – 等待多个函数来完成

所以我有这样的代码: var data = someobject; for(var x in data){ mongo.findOne({ _id:data[x]._id },function(e,post){ if(post != null){ post.title = 'omg updated'; post.save(function(){ console.log('all done updating'); }); } }); } // I need all ^ those functions to be done before continuing to the following function: some_function(); 我已经看了asynchronous库,我用于并行时,我有一个function,我需要运行一次的设置数量。 但是我不确定如何达到预期的效果。 所有这些function可以并行运行,我只需要知道什么时候完成。

Node.js&Redis; 等待一个循环完成

我想问这个问题,因为我不确定是否得到了Node.js逻辑 我有一组id,我需要使用redis'get方法来查询。 并检查一个特定的值(假设检查是否我给与“关键”的对象具有空名称),我将它们添加到列表中。 这是我的示例代码; var finalList = []; var list = []; redisClient.smembers("student_list", function(err,result){ list = result; //id's of students console.log(result); var possibleStudents = []; for(var i = 0; i < list.length; i++){ redisClient.get(list[i], function(err, result){ if(err) console.log("Error: "+err); else{ tempObject = JSON.parse(result); if(tempObject.name != null){ finalList.push(tempObject); } } }); } }); console.log("Goes here after […]

crypto.pbkdf2是asynchronous的,我如何将其视为同步?

我在node.js中使用pbkdf2来散列密码。 我的问题是,我正在响应身份validation请求,我正在进行身份validation,如果传递的凭据是正确的。 我假设pbkdf2是asynchronous的,因为它可能需要大量的时间(取决于迭代的大小)。 然而,将剩余的authentication逻辑转移到一个单独的方法来利用callback看起来有点难看。 有没有比使用计时器或将所有连续validation逻辑放入单独函数更好的方法? 我知道大多数人会说我应该使用callback,但在我的使用情况下,这是没有道理的。 直到我将pbkdf2应用到传递的密码之后,我才能继续进行身份validation。

Node.js请求下载文件有时为空或不存在

我正在用node.js和请求模块写一个下载器。 使用我正在做的stream语法 var r = request(url).pipe(fs.createWriteStream(targetPath)); r.on('error', function(err) { console.log(err); }); r.on('finish', cb); 下载文件,保存并调用callback。 但是,在接近50%的情况下,文件是空的或者根本不创build。 没有error事件。 即使文件还没有(完全)写入,看起来finish事件也会被触发。 上下文:整个事情被包装成async.each调用。 任何线索? 谢谢!

NodeJS,asynchronousforEachSeries执行顺序

试图让我的头在使用NodeJS的asynchronous模块。 我有以下代码。 var a1 = [1,2,3,4,5,6,7,8]; async.forEachSeries(a1, function(n1, callback) { console.log(n1); var a2 = [10,11,12,13,14]; async.forEachSeries(a2, function(n2, callback) { console.log(n1 + " " + n2); callback(); }); callback(); }); 我想以打印输出的方式来完成上述代码的处理 1 1 10 1 11 1 12 1 13 1 14 2 2 10 2 11 2 12 2 13 2 14 3 3 10 […]

Node.JS async.parallel不会等到所有任务完成

我正在使用aync.parallel并行运行两个函数。 这些函数请求RSS提要。 然后RSS提要被parsing并添加到我的网页。 但由于某种原因, async.parallel运行callback方法,而不必等到两个函数完成 该文件说: 一旦任务完成,结果作为一个数组传递给最终的callback。 我的代码。 require('async').parallel([ function(callback) { fetchRss(res, bbcOpts); // Needs time to request and parse callback(); }, function(callback) { // Very fast. callback(); } ], function done(err, results) { if (err) { throw err; } res.end("Done!"); }); 其实我只有“完成!” 在我的网页上。 为什么? 为什么我需要调用res.end() ? Node.JS文档说: response.end()方法必须在每个响应中调用。 如果我不打电话,我的网页将被“下载”(我的意思是在我的浏览器的地址栏中的进度条)。

Node.js和JSON.stringify缺less一些来自对象的值/参数

也许我不明白的JavaScript /咖啡脚本以及我想,但是当我这样做: that.thing = thing that.thing.title = "some title" console.log(that.thing.title) console.log(JSON.stringify(that.thing) 我得到输出: 一些标题 { “CREATION_DATE”: “2011-09-09T00:40:03.742Z”, “_ ID”: “4e6960638ec80519a0000013”} 问题是,我似乎失去了标题属性,当我做的string化(后来当function存在,我似乎有其他有趣的问题,我认为必须与'那',这嵌套在多个fxn调用)。 (我现在必须做一个丑陋的解决scheme,我现在在那里解决我的问题。我必须解决的其他问题之前,包括node.js + async + mongoose.find,这是所有内部的async.findEach) 当我做 console.log(that.thing.toJSON) 我得到: 函数(){返回this.toObject(); } 谢谢。

Async函数嵌套在async.js瀑布中

免责声明:非工程师,JS很新 嘿所有 – 我试图利用async.js模块链接一组函数在一起。 我希望的输出是迭代mapData (对象数组),然后传递给最终的函数(现在 – 只是console.log(result))。 async.waterfall([ function( callback ) { getCoords ( function( data ) { mapData = data; }); callback(null, mapData); }, function( mapData, callback ) { //getEmail ( mapData ); callback( null, mapData ); } ], function( err, result ) { console.log( result ); }); 但是, getCoords包含另一个asynchronous函数(在这里find)。 我所看到的是第一个callback(null,mapData)发生在它返回之前,导致一个空结果。 我如何构造这个以便mapData在返回到下一个块之前返回mapData ? […]

JS节点asynchronous处理事件

有人可以指出我或者解释某种基于事件的devise模式来处理等待两个事件完成的行为。 我有一个模板,加载asynchronous和数据库调用,也是在同一时间发生。 我有一个只有在这两个任务都完成时才需要执行的响应。 我能想出的唯一解决scheme就是做一些丑陋的事情,比如在布尔事件中设置为true,然后检查它们是否全部为真。 有一个更好的方法吗?

在nodejs中asynchronous嵌套循环,下一个循环只有在完成后才能启动

检查下面的algorithm… users = getAllUsers(); for(i=0;i<users.length;i++) { contacts = getContactsOfUser(users[i].userId); contactslength = contacts.length; for(j=o;j<contactsLength;j++) { phones = getPhonesOfContacts(contacts[j].contactId); contacts[j].phones = phones; } users[i].contacts = contacts; } return users; 我想用node.js开发同样的逻辑。 我曾尝试使用foreach和concat和foreachseries函数的asynchronous 。 但都在第二级失败。 当指针正在获取一个用户的联系人时, i值增加,下一个用户的进程正在开始。 它并不等待为一个用户完成联系人和电话的完成过程。 只有在下一个用户开始之后。 我想实现这一点。 其实我想得到正确的用户对象 意味着所有的序列都被破坏了,谁能给我一个总体思路,我怎么能够实现这样的系列化过程。 我打开也改变我的algorithm。