Articles of asynchronous

如何使用asynchronousI / O将实时数据集写入磁盘?

我是在node.js中开发的新手(尽pipe在客户端JavaScript方面经验相对丰富),并且在处理node.js中的asynchronous操作时遇到了很多关于良好实践的问题。 我的具体问题(虽然我想这是一个相当通用的主题)是,我有一个node.js应用程序(在树莓派上运行),每隔10秒将数个温度探测器的读数logging到内存数据结构中。 这工作得很好。 数据随着时间在内存中积累,随着数据积累并达到特定的大小阈值,数据会定期老化(只保留最后N天的数据)以防止数据增长超过一定的大小。 这个温度数据被用来控制一些其他的电器。 然后,我有一个单独的间隔计时器,每隔一段时间将这些数据写出到磁盘(如果进程崩溃,则保留它)。 我使用asynchronousnode.js( fs.open() , fs.write()和fs.close() )磁盘IO将数据写入磁盘。 而且,由于磁盘IO的asynchronous特性,在我看来,我试图写入磁盘的数据结构可能会在我写入磁盘的过程中被修改。 这可能是一件坏事。 如果在将数据写入磁盘时数据只附加到数据结构中,那么实际上并不会导致写入数据的方式出现问题,但是在某些情况下,在logging新数据时可能会修改较早的数据这真的会弄乱我在写入磁盘过程中的完整性。 我可以想到我可以在我的代码中使用各种有点丑陋的保护措施,例如: 切换到同步IO以将数据写入磁盘(对于服务器响应的原因,实际上并不想这么做)。 设置一个标志,当我开始写数据,并没有logging任何新的数据,而该标志设置(导致我在写入过程中丢失的数据logging)。 选项2更复杂的版本,我设置标志和设置标志时,新的数据进入一个单独的临时数据结构,当文件IO完成,然后合并真实的数据(可行,但似乎丑陋)。 拍摄原始数据的快照副本,并花时间将该副本写入磁盘,知道没有人会修改副本。 我不想这样做,因为数据集是相当大的,我在有限的内存环境(树莓派)。 所以,我的问题是当asynchronousIO的其他操作可能需要修改该数据时用什么devise模式来编写一个大的数据集? 处理我的问题的方法是否比上面列出的具体解决方法更多?

callback()或返回callback()

有可能我不太了解Node的事件循环。 说我有一个函数foo包含一个asynchronous函数async_func 。 我有吗 //1 function foo(callback) { //stuff here async_func(function() { //do something callback(); }); //this eventually get executed } 要么 //2 function foo(callback) { //stuff here async_func(function() { //do something return callback(); }); //never executed }

在.NET中使用C#可以在没有multithreading的情况下实现基于事件的asynchronous模式吗?

我为Node.js的build筑devise感到惊讶,并想知道C#是否有这样的devise能力: asynchronous,基于事件/事件循环,无阻塞I / O,无需multithreading。

使用promise来处理node.js中的MySQL返回值

我有一个python背景,目前正在迁移到node.js. 由于其asynchronous性质,我有调整到node.js的问题。 例如,我试图从MySQL函数返回一个值。 function getLastRecord(name) { var connection = getMySQL_connection(); var query_str = "SELECT name, " + "FROM records " + "WHERE (name = ?) " + "LIMIT 1 "; var query_var = [name]; var query = connection.query(query_str, query_var, function (err, rows, fields) { //if (err) throw err; if (err) { //throw err; console.log(err); logger.info(err); […]

调用循环内的asynchronous函数

var path; for (var i = 0, c = paths.length; i < c; i++) { path = paths[i]; fs.lstat(path, function (error, stat) { console.log(path); // this outputs always the last element }); } 如何访问传递给fs.lstat函数的pathvariables?

如何等待小溪完成pipe道? (的NodeJS)

我有一个承诺的循环数组,所以我用Promise.all来通过它们,然后调用。 let promises = []; promises.push(promise1); promises.push(promise2); promises.push(promise3); Promise.all(promises).then((responses) => { for (let i = 0; i < promises.length; i++) { if (promise.property === something) { //do something } else { let file = fs.createWriteStream('./hello.pdf'); let stream = responses[i].pipe(file); /* I WANT THE PIPING AND THE FOLLOWING CODE TO RUN BEFORE NEXT ITERATION OF FOR […]

使用node.js进行Javascriptasynchronousexception处理

我目前正在研究一个node.js应用程序,我有通常的asynchronous代码问题。 我正在Node的HTTP模块上实现一个服务服务器。 这个服务器支持(表示)路线。 例如,我有这样的代码: server.any("/someRoute",function(req,resp){ resp.end("this text is sent to clients via http") }); 服务器需要能够承受失败,当传递给任何一个函数有问题时,我不想让整个服务器崩溃。 当我写代码看起来像这样的问题发生: server.any("/someRoute",function(req,resp){ setTimeout(function(){ throw new Error("This won't get caught"); },100); }); 我不明白我怎么可能在这里发现错误。 我不想通过一个服务器端故障使服务器崩溃,而是想要服务500。 我能想出的唯一解决scheme实际上并不具有performance力。 我只想出了使用process.on("uncaughtException",callback)和类似的代码使用节点0.8 Domains (这是一个部分的补救措施,但领域是目前越野车,这仍然不是很有performance力,因为我最终不得不创造每个句柄的一个域)。 我想完成的是throw一个函数的throw动作绑定到一个作用域,理想的解决scheme就像将所有抛出的错误从一个函数绑定到一个特定的处理函数一样。 这可能吗? 在这种情况下处理错误的最佳做法是什么? 我想强调的是,它应该能够继续服务请求后,不良请求,并重新启动服务器的每个请求或创build域的每个处理程序和捕获他们的未捕获的exception对我来说似乎是一个坏主意。 另外 – 我听到承诺可能会帮助我(有关兑现承诺的事情),可以承诺在这种情况下援助我吗?

NodeJs,javascript:.forEach似乎是asynchronous的? 需要同步

我目前正在与3个朋友一起使用nodeJs,expressJs,MongoDB,html5,…因为我们对这些技术相当陌生,所以遇到了一些问题。 我找不到解决scheme的一个大问题是某些代码的asynchronous执行。 我想每一个循环完成,以便我有一个更新的在线朋友列表,并执行res.render(我通过在线朋友列表),因为目前它完成res.render之前完成循环。 码: function onlineFriends(req, res) { var onlinefriends = new Array(); onlinefriends.push("mark"); FriendList.findOne({ owner: req.session.username }, function (err, friendlist) { friendlist.friends.forEach(function (friend) { // here forEach starts OnlineUser.findOne({ userName: friend }, function (err, onlineFriend) { if (onlineFriend != null) { onlinefriends.push(onlineFriend.userName); console.log("a loop"); } }); }); console.log("online friends: " + onlinefriends); console.log("redirecting"); res.render('index', […]

ES6承诺 – 在承诺链中调用同步function

我目前正在尝试承诺,并有一个非常基本的问题! 在承诺链中,调用同步函数是不好的做法吗? 例如: .then(function(results) { if(checkIfResultInMemory(results) === true){ return getTotalFromMemory() } return results; }) 还是应该我的同步function重构承诺还呢?

Node.Js VS HttpAsync(asp.net)

在阅读了很多关于nodejs的东西之后,我仍然问自己: 什么是超过asp.net HttpAsync请求的好处 ? 唯一的限制(如我所见)是IIS限制的并发请求数。 我试图画出我目前的理解: 任何帮助? .net/ado.net上的任何asynchronous操作都不能执行nodejs的任何操作吗?