Tag: asynchronous

SailsJS / NodeJSpipe理asynchronous性质

我在我的控制器中有一个代码,在http请求上工作,以保存用户在前端添加的post。 所以我做了一些像Model.create()。 现在发生了什么事情是在回电我想​​返回是否成功添加的post,以便我的前端可以显示适当的消息给用户。 但创build方法asynchronous工作。 以下是一个示例代码: create: function(req, res){ Activity.create(req.body).done( function(err, persistedActivity) { // Error handling if (err) { return res.json({success: false}); // The Activity could not be created! } else { return res.json({success : true}); } } ); } 但是这个代码不起作用,因为Activity.create()方法是asynchronous的。 我也在其他问题或post中阅读过。 没有任何信息表明我正在寻找的具体实现,但它确实告诉我“不要与nodejs的asynchronous性质作斗争,它只会在晚些时候受到伤害”,相信我和其他人一样,我也不想受到伤害。 我基本上需要如何处理这个问题的build议。

Async-WaterFall不按预期工作

瀑布函数有两个调用,但第二个不等待第一个完全完成。 第一个有一个mongodb.find()调用。 这是async-waterfall函数 app.get("/news", function(req, res) { async.waterfall([ function (callback) { var blogs = tendigiEngine.getAllBlogs(callback); callback(null, blogs); }, function (blogs, callback) { var array = tendigiEngine.seperateBlogs(blogs, callback); callback(null, array ); } ], function (err, result) { // result now equals 'done' console.log("done"); console.log(result); }); }); 这里是被调用的两个函数:getAllBlogs(): exports.getAllBlogs = function() { Blog.find(function(err, theBlogs){ if(!err) { return […]

将对象从asynchronouscallback函数中推入到本地数组中

我在我的服务器上使用node.js,并使用redis key-store来存储有关我的angular色的数据。 每个连接都有自己的特点。 我想把字符(人物,名字,年龄,职业等等)的所有数据都转换成字符数组,所以我可以有select地把它发送给连接的客户端。 var Characters = []; for (var ID in Connections) { redis_client.HGETALL(ID, function(err, result) { if (result) { Characters.push(result); } }); } console.log(Characters); 我已经读过,这是由于asynchronousvs同步问题,所以我做了全局variables字符。 //global variables var character; //function code var Characters = []; for (var ID in Connections) { redis_client.HGETALL(ID, function(err, result) { character = result; }); if(character) { console.log(character); // […]

对于在NodeJS中遍历数组的循环,但console.log不会打印到terminal?

我使用Node.JS来遍历一些数据,并将数据推送到一个数组。 但是,console.log似乎没有显示我所做的任何更改。 我希望能够处理twitter_ids中的数据后,function完成数据。 我想知道是不是因为Node.JS的asynchronous性质的误解? var twitter_ids = [] function sendResults (twitter_ids){ return function(data){ for (var num in data['results']) { T.get('users/lookup', { screen_name: data['results'][num]['twitter_id'] }, function(err, data, response) { twitter_ids.push(data[0]['id']); }); } console.log(twitter_ids); } } sunlightResults.call(sendResults(twitter_ids));

async.each / forEach第三个参数(callback)在每个时间间隔后触发

你好 我有接受两个数组和callback函数的函数,我正在使用async.each(并尝试async.forEach,都有相同的结果)迭代其中一个数组,一切工作正常,但我收到的callback作为参数,这是第一次迭代之后触发的第三个参数。 这是我的代码。 function itemLikes(instruments,likes, finalCallback){ var items = []; if(instruments.length >= 1){ async.forEach(instruments, function(instrument,cb){ if(likes){ if(likes.indexOf(instrument._id.toString()) !== -1){ instrument.liked = 1; cb(items.push(instrument)) } else{ cb(items.push(instrument)) } } else{ cb(items.push(instrument)) } }, function(err){ finalCallback(items) }) } else{ finalCallback(items) } } 这是我从文档中理解的,但是我的第一次迭代完成后,我的finalCallback就被触发了。 感谢致敬。

无法使用asynchronous瀑布运行parse-csv函数

我试图请求一个URL,从它获得一个CSV文件,然后将该CSV变成JSON。 我正在使用请求 , asynchronous和csvparsing器 我有这个代码: var fs = require('fs'), async = require('async'), request = require('request'), csv = require('csv-parser'), fileUrl = 'http://forever.codeforamerica.org/fellowship-2015-tech-interview/Violations-2012.csv' var getData = function(cb){ request(fileUrl, function(err, response, body){ (err) ? cb(err) : cb(null, body); }) }; var parseCsv = function(csvData, cb){ var violations = []; fs.createReadStream(csvData) .pipe(csv()) .on('data', function(violation){ violations.push(violation) }) .on('end', function(){ cb(null, […]

nodejs – 何时使用asynchronous而不是同步function?

我读过一些关于这个东西的文章。 不过,我仍然陷在一个点上。 比如我有两个function: function getDataSync(){ var data = db.query("some query"); return JSON.stringify(data); } function getDataAsync(){ return db.query("some query",function(result){ return JSON.stringify(result); }); } 人们说在IO界限中推荐使用asynchronous programming 。 但是,在这种情况下,我看不出什么不同。 Async似乎更丑陋。 我的观点有什么问题?

asynchronous每个引入一个延迟

这是我的问题。 我有一个对象数组,我需要遍历它们,并为每个对象做一个API请求。 我最初的select是使用每个asynchronous 。 这里的问题是API不能接受每秒10个请求。 我想知道是否有办法引入一些延迟或一些策略,我们可以限制我们每秒做的API调用

sails.jsasynchronous问题

我想testingsails.js的asynchronous性能,所以我写了下面的代码等待10秒(我认为代码应该由于callback函数asynchronous执行)。 当我访问执行代码的url时,它等了10秒,没事的。 但是与此同时,我访问了一个只执行res.view(anohterView)的不同url,它仍然等了10多秒。 这是否意味着sails.js同步执行,并且第二个访问的URL被第一个阻塞? 谢谢! someModel.findOne(modelId, function foundModel (err, model) { if (err) return next(err); if (!model) return next('Model doesn\'t exist.'); function sleep(milliSeconds) { var startTime = new Date().getTime(); while (new Date().getTime() < startTime + milliSeconds); } sleep(10000); res.view(Someview); });

当写入数据库的并发API调用发生时(或者当服务器速度较慢时)阻止争用条件

让我们想象一下,您将有一个端点用于创build一个用户。 这将是一个平静的应用程序,所以让我们设想一个富客户端调用这个API端点。 exports.createUser = function(req,res){ if(req.body){ //Check if email has already been used db.User.find({where:{email:req.body.email}}).success(function(user){ if(user === null || user === undefined){ //Create user res.send(201); } else { res.json(409,{error: 'User already exists'}); } }); } else { res.send(400); } }; 如果我真的要多次调用这个端点,那么即使您查询了用户表以确保没有重复,也可以在数据库中使用相同的电子邮件创build多个logging。 事实上,我已经设法通过一个我做的压力testing器和一个使用PostgreSQL的节点应用来重新创build这个小实验。 我相信这是一个普遍的问题,但是如何防止这个问题? 我严格限制对某个端点的请求数量,但这似乎不是一个很好的解决scheme。 有任何想法吗? 非常感谢你!