Tag: asynchronous

什么是async.waterfall的简单实现?

我正在使用asynchronous库中的一些函数,并且要确保我理解他们在内部是如何做的。 然而,我卡在async.waterfall ( 这里的实现 )。 实际的实现使用了库内的其他function,没有太多的经验,我觉得很难遵循。 有人可以不担心优化,提供一个非常简单的实现,实现瀑布的function? 大概是这个答案可比的东西。 从文档中 ,瀑布的描述: 按顺序运行函数的任务数组,每个函数将结果传递给数组中的下一个。 但是,如果任何任务将错误传递给自己的callback,则不执行下一个函数,并立即调用主callback并返回错误。 一个例子: async.waterfall([ function(callback) { callback(null, 'one', 'two'); }, function(arg1, arg2, callback) { // arg1 now equals 'one' and arg2 now equals 'two' callback(null, 'three'); }, function(arg1, callback) { // arg1 now equals 'three' callback(null, 'done'); } ], function (err, result) { // result […]

nodejs等待,直到所有的MongoDB调用循环完成

我正在逐行读取一个CSV文件的数据stream,并在每一行调用一个findOne MongoDB调用,在运行下一个函数之前,我怎么才能等到每行的所有mongo调用都完成? 我见过Promises能做到吗? 但是我发现Promises非常难以理解。 而且我发现的例子都没有包括我想要的。 :/ var validProducts = []; fs.createReadStream(req.file.path) .pipe(csvStream) .on('error', function (err) { console.error(err); }) // loop through all rows .on('data', function (data) { if (data.size === 'a3') { ProductModel.findOne({ sku: data.sku }, function (err, product) { if (product !== null) { product.size = data.size; product.save(); validProducts.push(product); } }); } }); // […]

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 ? […]