Articles of asynchronous

Node.js同步与asynchronous

我目前正在学习node.js,我看到2个同步和asycn程序(同一个)的例子。 我明白一个callback的概念,但我试图理解第二个(asynchronous)的例子的好处,因为它们似乎是两个正在做同样的事情,即使这种差异… 你能否详细说明为什么第二个例子会更好? 我会很乐意得到更广泛的解释,这将有助于我理解这个概念。 谢谢!! 第一个例子: var fs = require('fs'); function calculateByteSize() { var totalBytes = 0, i, filenames, stats; filenames = fs.readdirSync("."); for (i = 0; i < filenames.length; i ++) { stats = fs.statSync("./" + filenames[i]); totalBytes += stats.size; } console.log(totalBytes); } calculateByteSize(); 第二个例子: var fs = require('fs'); var count = 0, totalBytes […]

Node.js – parsing简单的JSON对象和访问键和值

我是Node新手,并努力访问一个简单的JSON对象。 我的request.body将具有类似于以下的JSON内容: { "store_config": [ { "name": "hello", "name2": "world" } ] } “store_config”值将始终存在,但其中的键和值可以是任何值。 我如何迭代通过键和值访问每个? 我也想以asynchronous的方式处理每一个。 欣赏任何想法或方向。 UPDATE console.log(typeof(request.body)); 返回: Object parsedBody = JSON.parse(request.body); 收益: SyntaxError: Unexpected token o at Object.parse (native) 更新2 – 进一步debugging: 当我尝试遍历数组时,只有一个值: request.body.store_config.forEach(function(item, index) { console.log(index); console.log(request.body.store_config[index]); }); 收益: 0 { name: 'hello', name2: 'world' }

非法break语句(Node.js)

尝试在Node.js和MongoDB中查找唯一标识,方法是创build一个查询MongoDB现有标识的while循环,直到find唯一值。 如果这个ID已经被使用了,那末一个数字就会增加,直到Mongo什么也没有返回。 除了break;之外,一切都在工作break; 声明何时find唯一的ID。 Node.js返回: SyntaxError: Illegal break statement 代码: db.collection('landmarks').findOne({'id':uniqueIDer}, function(err, data){ //if ID exists already if (data.id){ var uniqueNumber = 1; while (1) { var uniqueNum_string = uniqueNumber.toString(); var newUnique = data.id + uniqueNum_string; db.collection('landmarks').findOne({'id':newUnique}, function(err, data){ if (data.id){ uniqueNumber++; } else { saveLandmark(newUnique); break; } }); } } else { saveLandmark(uniqueIDer); } […]

什么函数在NodeJs和JS中放入EventLoop

我一直在阅读一些NodeJs的文章,以了解它的asynchronous性质,在这期间我发现了这个,并且非常喜欢Node.js,Doctor's Offices和Fast Food Restaurants – 了解事件驱动的编程 有一个叫做EventLoop的东西是基于FIFO的队列。 他们说,当一个asynchronous函数被击中时,它会被放到EventLoop并继续在那里执行。 我在这里有点困惑。 例如这里说: 实际上,像setTimeout和setInterval这样的asynchronous函数被推送到一个称为Event Loop的队列中。 并在同一篇文章中: 事件循环是一个callback函数的队列。 当asynchronous函数执行时,callback函数被推入队列中。 JavaScript引擎不会开始处理事件循环,直到执行asynchronous函数之后的代码。 但它不同于这个图像: 我们来看下面的例子: console.log("Hello,"); setTimeout(function(){console.log("World");},0); 所以从我从这些不同的解释中得知, 第一个说function(){console.log("World");} setTimeout()函数的一部分,也就是callback,将放在EventLoop中。 一旦setTimeout完成,它也将执行EventLoop 。 另一个说,整个事情setTimeout(function(){console.log("World");},0); 将被放入EventLoop并将被执行… 我现在更困惑了。 这应该是简单的,但我想一个好的,但简单的解释对我来说是很好的下列问题: 上述哪一项是真实的? 什么是EventLoop? 比喻,方法,对象等真实的东西? 如果我想从零开始实现一个类似于EventLoop的事情,它会如何简单? 也许有些代码会很好看。

我知道callback函数asynchronous运行,但为什么?

哪一部分的语法提供了这个函数应该在其他线程中运行并且是非阻塞的信息? 让我们考虑node.js中的简单asynchronousI / O var fs = require('fs'); var path = process.argv[2]; fs.readFile(path, 'utf8', function(err,data) { var lines = data.split('\n'); console.log(lines.length-1); }); 究竟是什么使得它发生在后台? 任何人都可以解释它精确或粘贴到一些好的资源的链接? 我看到的地方有很多关于callback是什么的信息,但没有人解释为什么它实际上是这样的。 这不是关于node.js的具体问题,而是关于每种编程语言中callback的一般概念。 编辑: 可能我提供的例子在这里不是最好的。 所以我们不要考虑这个node.js代码片段。 我一般问 – 什么使程序在遇到callback函数时继续执行的技巧。 callback概念是一个非阻塞的语法是什么? 提前致谢!

task.js生成器/ promise和asynchronouscallback

我想知道在JavaScript中处理asynchronous代码时,哪两种方法更好。 我想了解哪个方法导致更干净的代码。 我使用的承诺,他们似乎比asynchronous方法( https://github.com/caolan/async )更灵活。 我也知道Task.js库( http://taskjs.org/ ),但这依赖于Ecmascript Harmony的一部分yield关键字。

什么是在“完成所有事情”之后退出node.js脚本的好方法

我的node.js脚本从数据库1的表中读取行,进行一些处理并将行写入数据库2。 一切完成后脚本应该退出。 我怎么知道一切是否完成,然后退出节点? 如果我有这样的callback函数: function exit_node() { process.exit(); } (编辑:同时显而易见,process.exit()也可以用db.close()来代替 – 但这不是什么问题。问题是在什么时候完成这个工作,即如何以及在哪里执行这个callback。) 但是把它附在某个地方并不容易。 从db1上次读取后不正确,因为处理和写入还是要发生。 将它附加到写入db2并不容易,因为它必须在最后一次写入之后进行连接,但每次写入都是独立的,不知道它是否是最后一次写入。 理论上也可能发生最后一次写入完成,但在此之前的另一次写入仍在执行。 编辑:对不起,我可以看到这个问题的解释不完整,可能令人困惑,但有些人仍然理解,下面有很好的答案。 请继续阅读评论和答案,它应该给你全部的图片。 编辑:我可以想到一些“阻塞”控制器机制。 脚本的不同部分为每个打开的“作业”向控制器添加阻止程序,并在作业完成后释放它们,并且当没有更多的作业者时,控制器退出脚本。 也许asynchronous可以帮助: https : //github.com/caolan/async 我也担心这会炸毁代码和逻辑不合理。

使用node.js函数确定成功/失败的函数async.retry

我正在研究node.js模块的asynchronous,但我有一些async.retry函数的问题。 根据其github文档 ,该function将继续尝试任务,直到成功或机会用完。 但是我的任务怎么能告诉成功或失败呢? 我试了下面的代码: var async = require('async'); var opts = { count : -3 }; async.retry(5, function (cb, results) { ++this.count; console.log(this.count, results); if (this.count > 0) cb(null, this.count); else cb(); }.bind(opts), function (err, results) { console.log(err, results); }); 我期望它运行,直到count === 1 ,但它总是打印这个: -2 undefined undefined undefined 那我该如何正确使用这个function?

Node.js实际上使用下面的多个线程吗?

在阅读了关于node.js的所有文献之后,我仍然回到这个问题,node.js本身是否利用了多个线程? 我认为答案是肯定的,因为如果我们使用简单的asynchronous文件读取示例,必须要做的工作来读取文件,但如果节点的主事件循环不处理这个工作,那必然意味着应该有一个POSIX线程运行在需要处理文件读取的地方,然后在完成时将callback放回到要执行的事件循环中。 所以当我们说Node.js在一个线程中运行时,我们实际上是否意味着node.js的事件循环只有一个线程? 还是我错过了这里的东西…..

node.js async.js nextTick vs setImmediate

我有一个大量使用async.js模块的大型node.js应用程序。 我有很多这样的代码: async.series([ function(callback){ sql.update(query, callback); }, function(callback){ if (something){ sql.update(query2, callback); } else{ callback(null); } } ]); 最大的问题是else语句中的同步callback。 我读了一段时间,你不应该这样做与async.js,因为它可能会导致意想不到的结果,但我不知道什么是最好的select。 我读过,我应该在一些地方使用process.nextTick,但现在我正在阅读,我们不应该使用它,它应该设置为立即。 有人能指出我正确的方向吗? 谢谢!