Articles of async.js

在JavaScript中asynchronous迭代大量数组,而不会触发超出的堆栈大小

我的环境是NodeJS,尽pipe这也可能是Web相关的问题。 我有一个数据库的大量数据,我试图枚举。 然而,为了争论让我说,我有一个20000string的数组: var y = 'strstrstrstrstrstrstrstrstrstr'; var x = []; for(var i = 0; i < 20000; i++) x.push(y); 我想枚举这个列表asynchronous,可以说使用asynchronous库 ,并可以说,因为我超级谨慎,我甚至一次限制我的枚举5次迭代: var allDone = function() { console.log('done!') }; require('async').eachLimit(x, 5, function(item, cb){ … someAsyncCall(.., cb); }, allDone); 期望的是5个x的项目将在上面同时迭代,并且最终所有20,000个项目将被迭代,并且控制台将打印“完成!”。 实际发生的是: Uncaught exception: [RangeError: Maximum call stack size exceeded] 在这一点上,我认为这一定是asynchronous库的一种错误,所以我写了自己的eachLimit版本,如下所示: function eachLimit(data, limit, iterator, cb) { […]

Node.JS async.parallel混淆| 什么是由async.map返回

OneDrive和GDrive共有50个文件夹,每个文件夹包含500个文件。 onedriveUrls和gdriveUrls是length 50的数组,分别包含指向这些文件夹的链接。 混乱! 下面的代码预计在两个层次上并行运行,第一个是async.parallel ,第二个是async.map ,它是一个正确的代码,还是async.map应该封装在setTimeout以确保所有级别都是并行运行的? async.parallel({ onedrive: function(callback){ async.map(onedriveUrls, request, function(err, results) { if (err) throw(err); // handle error callback(null,results); }); }, gdrive: function(callback){ async.map(gdriveUrls, request, function(err, results) { if (err) throw(err); // handle error callback(null,results); }); } }, function(err, results) { // results is now equals to: {onedrive: [array_of_length_x], gdrive: [array_of_length_y]} }); […]

使用瀑布节点async.js多function

我不是节点和async.js的专家。 所以期待js社区的帮助。 所以这里是我的场景,我想一个接一个地做3个操作,每个都取决于以前的结果。 通过使用以前的结果,我需要调用asynchronous函数来检索另一个结果。 所以我决定去asynchronous瀑布。 (希望我select了正确的)。 async.waterfall([ function(callback) { request({ method: 'GET', headers: {'Content-Type' : 'application/json'}, url : url },function(error, response, body){ if(error) { callback(error); } else { var result= JSON.parse(body); callback(null,result); //sending to next function } }); }, function(result, callback) { //here i want to use the result array in loop async.eachSeries or forEachSeries […]

节点async.js:callback不是函数错误?

我有这个代码: async = require('async') async.auto({ getUserName: function(callback) { console.log('**In getUserName.**') callback(null, 'Lem') }, connectToDb: function(callback) { console.log('**In connectToDb.**') var connected = true if(connected) { callback(null, connected) } else { callback('Error connecting to DB.', null) } }, checkIfUserExist: [ 'getUserName', 'connectToDb', function(callback, results) { console.log('**In checkIfUserExist.**', JSON.stringify(results)) var userExist = false if(userExist) { callback('User exist in […]

从2个mongodb集合中search后,Nodejs进行单个callback

我有2个系列Stud and Prof。 我有一个函数,把id作为参数,并返回相应的信息,如果id属于任何这个集合。 第一个函数调用:传递属于Prof集合的id 第二个函数调用:传递属于Stud集合的id 预期成果:获得教学成果第一和螺柱结果第二 但是,由于asynchronous性质,我总是得到螺旋结果第一和教授结果第二。无论如何,通过引入一个新的variables或改变查询方式来完成这个任务吗? 任何帮助将不胜感激 var check_user_info = function(userid, callback) { Stud.findOne({ '_id': userid }, function(err, stud) { if (err) throw err if (stud) { callback(stud); } else { Prof.findOne({ '_id': userid }, function(err, prof) { if (err) throw err if (prof) { callback(prof); } else { callback(false); } }) } […]

如何从async.js系列返回结果

我看到的每个async.js例子都是这样的: var async = require(“async”); async.series([ function(callback) { setTimeout(function() { console.log(“Task 1”); callback(null, 1); }, 300); }, function(callback) { setTimeout(function() { console.log(“Task 2”); callback(null, 2); }, 200); }, function(callback) { setTimeout(function() { console.log(“Task 3“); callback(null, 3); }, 100); } ], function(error, results) { console.log(results); }); 最后,他们总是只是console.log结果。 但是,你怎么实际返回结果。 每次我尝试它只是回到未定义。 我需要这样的东西: var async = require('async'); var handler […]

是调用Node.js的async.parallel()同步吗?

我正在看看Node.js的async模块来解决一个问题。 我已经实施了一个小testing: var async = require("async"); function print(val) { console.log(val); } async.parallel([ function(cb){ print(1); cb(null); }, function(cb){ print(2); cb(null); }, function(cb){ print(3); cb(null); }, function(cb){ print(4); cb(null); }, function(cb){ print(5); cb(null); } ], function(err) { if ( err ) { console.error(err); return; } console.log("Done!"); } ); console.log("Trulu"); 我可以确定在调用async.parallel之前,Trulu日志调用将永远不会被调用吗? 换句话说,在Trulu日志被调用之前调用的所有函数和最终callback函数都是如此吗?

Nodejsasynchronous编程 – 为什么需要“asynchronous”模块? 什么是“回拨地狱”/“厄运金字塔”?

NodeJS最大的特点之一就是它与我正在阅读的内容是不asynchronous的,但是作为NodeJS的初学者,如果这个模块已经在本地处理了,为什么会有类似async模块呢? https://www.npmjs.com/package/async 我认为有一个很好的理由,但对我来说并不明显。 是处理callback hell还是Pyramid of Doom ?

Map-Reduce in Node

我有我的array=[{id:"1"}, {id:"2"}, {id:"3"}]并要将其转换为对象: {"1":true, "2", true, "3":true}; 所以我做了以下工作: async.reduce(myArray, {}, function (memo, item, callback) { memo[item.id] = true; callback(null, memo); }, function (err, myObj) { console.log("converted object", myObj); } 它做的工作,但我不知道这是否有意义的performance或毫无意义? 在这里他们build议使用map reduce,但是我还是很困惑,怎样才能用map和reduce来提高性能; 任何帮助表示赞赏。 谢谢

每个简单的asynchronouseachLimit示例会引发范围错误?

我的代码非常简单: async.eachLimit(lines, 5, function iterator(line, complete) { console.log(line) complete(null); }, function done(err) { if(err) throw err; console.log('done yo!'); }); 但是,我不断收到以下错误。 我不了解什么? RangeError: Maximum call stack size exceeded