Articles of async.js

如何按照数组内容的顺序执行async.map函数

我有下面的代码例程,很好用。 唯一的问题是,我需要的结果回来的links数组相同的顺序。 例如,我需要首先返回google.com链接的结果,然后是雅虎等。代码当前以“随机”顺序返回。 var Nightmare = require('nightmare'); var async = require('async'); var links = [ "http://www.google.com", "http://www.yahoo.com", "http://www.bing.com", "http://www.aol.com", "http://duckduckgo.com", "http://www.ask.com" ]; var scrape = function(url, callback) { var nightmare = new Nightmare(); nightmare.goto(url); nightmare.wait('body'); nightmare.evaluate(function () { return document.querySelector('body').innerText; }) .then(function (result) { console.log(url, result); }) nightmare.end(function() { callback(); }); } async.map(links, scrape); 更新:谢谢@christophetd。 […]

使用Hapi&Async的API – 如何清空数组/在“回复”或每个新的“get”之后立即执行?

我正在构build一个小API,用于获取数据并对其执行任务(使用asynchronous),使用push将这些数据的一部分存储在数组中,然后用Hapi的reply()将其显示给客户端。 我正在寻找清空我的数组(例如使用arrayname.length = 0)服务器已发送答案的客户端。 目前的代码遵循这个逻辑: let data = [] server.route({ method: 'GET', path: '/api/{data}', handler: function (request, reply) { async.parallel([ function(callback) { // fetch some data, work with it and then add it to our array using push data.push ({ // example data bla:'blabla', number:'10' }); callback(); }, function(callback) { // another time (…) data.push […]

Promises + async.js

我总是阅读使用承诺与async.js不是一个好主意。 我想明白为什么。 我正在使用async.eachLimit来控制文件中asynchronous操作的限制,并承诺在完成所有asynchronous操作后返回结果。 例: const maxOfAsync = process.env.maxOfAsync || 500; return new Promise((resolve, reject) => { async.eachLimit(arrayOfFiles, maxOfAsync, (file, callback) => { callExternalLib(file).then((data) => { file.data = data; callback(); }).catch((error) => { callback(error); }); }, (error) { if (error) return reject(error); resolve(arrayOfFiles); }); }); 如果我不应该一起使用,如何达到相同的结果? 让我们忘记asynchronous/等待一分钟,然后返回只有Promises和async.js存在的日子。 我能做什么? 谢谢。

NodeJs:使用请求url的asynchronous – Post方法发送响应之前执行的所有url

我有一个post方法,其请求input是一个newLink对象列表(具有属性linkUrl和状态的newLink)我使用async.map迭代我的URL检查链接是否是活动的。 newLinks包含像{www.google.com,www.nourl.com,www.xyz.com}这样的链接,我希望毕竟这个请求被处理,并设置相应的状态为true或false,我希望这个使用res来发送。发送(newLinks) 但控制台给出了以下结果:“www.google.com已经启动”,然后调用res.send(),然后执行“www.nourl.com is up”和“www.xyz.com is up” 所以基本上,在第一个url请求之后,我的代码在asynchronous循环之外执行函数。 我认为asynchronous将只允许所有的urlvalidation后才能执行下一段代码。 app.post('/myposturl', function(req , res){ var request = require('request'); let linkDetails= req.body.linkDetails; var i = 0; async.map(linkDetails, function(newLink, callback) { var Url = "url"; var url = newLink.linkUrl; var proxiedRequest = request.defaults({'proxy': Url}); proxiedRequest(url , function (error, response, body) { if(error){ console.log('Err: '+ error); } if (!error) […]

async.js并行工作不正常

我有以下代码: async.parallel({ one: function(callback) { gps_helper.get_gps(PEMSID, conn, start, stop, function(fullResults){ callback(fullResults); }) }, //query for new dataSet two: function(callback) { admin.getTh(function(gpsThresholds){ callback(gpsThresholds); }) } }, function(results){ console.log(results); console.log('emitting GPS…'); socket.emit('GPS', {gpsResults: results.one, thresholds: results.two, PEMSID: PEMSID, count: count, length: PEMSToDisplay.length, checked: checked}); count++; }); 这是行不通的,我的控制台显示第一个查询在callback中结束。 在输出中也没有{one: fullResults, two: gpsThresholds}格式,它只是显示各个函数的callback值。

nodejsasynchronous:多个相关的HTTP API调用

我正在开发一个项目,其中包括向不同的API发出多个HTTP GET请求,每个请求都需要最后的信息。 我试图避免嵌套callaback和反地狱,并试图让它与async模块的工作。 这是我需要做的:我有一个1..n课程标识符( ['2014/summer/iat/100/d100', '2014/spring/bisc/372/d100'] )。 对于数组中的每门课程,我需要通过HTTP GET获取其课程大纲。 产生的大纲看起来像这样: { "info": { "nodePath": "2014/spring/bisc/372/d100", "number": "372", "section": "D100", "title": "Special Topics in Biology", "term": "Spring 2014", "description": "Selected topics in areas not currently offered…", "name": "BISC 372 D100", "dept": "BISC", }, "instructor": [ { "lastName": "Smith", "commonName": "Frank", "phone": "1 555 555-1234", "email": "franksmith@school.edu", […]

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