Articles of asynchronous

我如何获得嵌套在两个分配函数和forEach循环内的值?

我正在写一个NodeJS模块,从Dropbox复制一堆文件夹,并根据文件夹结构创build一个目录。 令我头疼的部分是我需要获取主目录中所有文件夹的名称,然后才能获得文件夹中所有文件的名称,然后再转到下一个函数。 这是我现在的过程: 使用dropboxClient.readdir()获取主目录中的文件夹列表 遍历文件夹并获取名称子文件夹(再次使用dropboxClient.readdir()) 迭代这些子文件夹并获取文件的名称。 如果文件是降价文件,请将该名称添加到列表中 返回子目录中所有降价文件的列表 和一些伪代码: function getListOfFiles() { var subfolders = []; var fileNames = []; dbClient.readdir('', function(error, folders) { folders.forEach(function(folder, index) { subfolders.push(folder); dbClient.readdir('/'+folder, function(error, subfolders) { subfolders.forEach(function(subfolder, index) { dbClient.readdir('/'+folder+'/'+subfolder, function(error, files) { files.forEach(function(file, index) { if (isMarkdownFile) { fileNames.push(file) } }); }); }); }); } }); return fileNames; […]

节点中的asynchronousrecursionReaddir

我试图用我写的recursion函数来扫描文件和子目录的大目录。 这和这个答案中给出的并行循环非常相似。 var fs = require('fs'); var walk = function(dir, done) { var results = []; fs.readdir(dir, function(err, list) { if (err) return done(err); var pending = list.length; if (!pending) return done(null, results); list.forEach(function(file) { file = dir + '/' + file; fs.stat(file, function(err, stat) { if (stat && stat.isDirectory()) { walk(file, function(err, res) { […]

更新async.each中的请求参数?

我正在修复我的node.js爬行程序。 他是其中的一部分: var site = 'http://www.some.com/'; var startPath = '/hambaarst-1.aspx?ipp=35'; var pageNumArray = [2,3,4,5,6,7,8,9,10,11,12]; async.series([ function(callback) { async.each(pageNumArray, function(page, callback) { request(site+startPath, function(err, resp, body){ if(!err && resp.statusCode == 200){ var $ = cheerio.load(body); $('div.Info').find("a").each(function(){ var url = $(this).attr('href'); doctorPageUrlArray.push(url); }); } else { console.log(resp.statusCode); } startPath = startPath.slice(0,11)+page+startPath.slice(-12); // HERE, I am changing start […]

失去与async.waterfall范围

我在JavaScript新,所以这可能是微不足道的。 我试图根据Node JS / Restify的asynchronous模块的瀑布方法来运行一系列函数。 这种方法的主要优点是可以将当前callback的“结果”传递给下一个等等,从而有可能打破“瀑布”并运行下一个中间件。 如文档中所述,它的参数是一组函数和最后一个中间件。 所以我根据下面的代码设置我的function,然后调用 var fn1 = function(callback){ console.log(req.params.user_id); callback(null, req.params.user_id); }; var fn2 = function(user_id, callback){ console.log(user_id); callback(); } server.get('/:user_id', function(req, res, next){ async.waterfall([fn1, fn2], function(err, result){ next(); }) }, …(next middleware) ) 而我没有得到预期的结果,因为req对象没有被定义。 但是,当这样做: server.get('/:user_id', function(req, res, next){ async.waterfall([ function(callback){ console.log(req.params.user_id); callback(null, req.params.user_id); }, function(user_id, callback){ console.log(user_id); callback(); } […]

Nodejsasynchronousmongodb保存或更新

所以我创build了一个REST API,当有人调用一个方法来返回数据时,我从外部API获取数据,检查数据的ID是否已经存在,如果有,更新它,如果没有创build它。 问题是,如果另一个请求进入相同的资源,我的函数查找数据,并发现它不存在(但),但到了保存调用的时候,从以前的保存function已经完成,所以保存失败(有些字段必须是唯一的)。 我目前使用nodejs async和一个worker来设置一个队列。 这工作,但我认为这将是真正导致性能问题! 有谁知道我怎么能做到这一点,不会导致性能问题? var storeData = function(APIResponse, id, callback){ Record.findOne({ id: id }, function(err, data) { if(data === null) { //No record, so lets create one var data = {}; data.id = id; data.title = APIResponse.title; var dataToSave = new Record(data); } else { //data exists in store, lets update it […]

如何纠正一个asynchronous程序的结构,以确保正确的结果?

我有一个nodejs程序,请求一系列XML文件,parsing它们,然后将输出放入一个数组,该数组作为CSV文件写入磁盘。 该程序主要工作,但偶尔文件结束在arrays中错误的顺序。 我希望结果的顺序与URL的顺序相同。 这些URL存储在一个数组中,所以当我得到XML文件时,我会检查源数组中的URL索引,并将结果插入目标URL中的相同索引处。 任何人都可以看到允许结果以错误的顺序结束的缺陷? addResult = function (url, value, timestamp) { data[config.sources.indexOf(url)] = { value : value, timestamp : timestamp, url : url }; numResults++; if (numResults === config.sources.length) { //once all results are in build the output file createOutputData(); } } fs.readFile("config.json", function (fileError, data) { var eachSource, processResponse = function (responseError, response, […]

用空值填充缺失的值

什么是最好的/最干净的解决scheme,find与unionObject相比在obj1中错过的字段,并添加值为null的缺失字段; 比如object1: var object1= { id: '123', name: 'test1' } 和unionObject是: var unionObject = { id: '124', name: 'test2', type: 'type2', files: { http: 'test12.com', https: 'test2.com' } } 所以这里object1缺less带有http和https字段的文件; 所以我希望的输出是: var desiredOutput= { id: '123', name: 'test1', type: null, files: { http: null, https: null } } 请注意,这不是我所需要的: var notDesiredOutput= { id: '123', name: […]

获取未定义的函数调用Express渲染()

我是Node和Express的新手,并且遇到从一个函数获取数据时遇到问题,并将其作为var传递给另一个函数。 我认为这是因为我没有正确处理callback和asynchronous的东西,但会很感激。 代码应该有希望解释。 我试图从URL中检索一些JSON数据,并将其传递给router.get函数的render()方法。 然而,没有什么(“未定义”)被发送。 当我单独运行getData()函数时,它会返回正确的数据,如上所述,我认为这是因为我没有正确处理asynchronous的东西。 function getData(cid){ var request = require("request"); var cid ='XXXXXX' // hard code temp var baseUrl = "someurl.com" var apiKey = "XXXXXX" var cUrl = baseUrl+cid+'?api_key='+apiKey request({ url: cUrl, json: true }, function (error, response, body) { if (!error && response.statusCode === 200) { console.log(body._embedded.assets); //Print the json response return […]

HTTP请求期间的RabbitMQ事件上的Express.js – res.send()?

我在我的网站上进行用户注册。 exports.regitser = (req, res)-> user = unique_id : "RANDOM_HASH" name : escape(req.body.name) pass : escape(req.body.pass) … # registrations starts here 在这一刻我需要推送数据到RabbitMQ交换,并等待在单独的队列"reg_results"响应。 当我在unique_id="RANDOM_HASH" "reg_results ”中收到消息后,似乎这个用户(对于这个HTTP请求)的注册成功完成,现在我可以给客户端res.send("You are registered!") 在继续来自客户端的HTTP请求的情况下处理这种模式的最好方法是什么? 提前致谢。

Mongoose + Node.js:asynchronous问题

我在ReadyForReview集合中有一堆configuration文件。 每个configuration文件都包含一个“user_id_to_review”字段。 我想使用user_id_to_review将Users集合中的用户信息附加到每个configuration文件。 // looking for all ReadyForReview profiles ReadyForReview.find() .exec(function(err, profilesReadyForReview) { var profilesReadyForReviewArray = [] //array that will be populated with profiles and user info // for each profile, figure out what the info for the user is from user table for (var i = 0; i < profilesReadyForReview.length; i++) { var thisUserProfile […]