Tag: 事件循环

节点asynchronous数组循环结果不符合预期

function asyncForEach(array,cb) { array.forEach(function(i){ setTimeout(cb(i),0); }); } asyncForEach([1,2,3,4], function(i) { console.log(i); }); console.log("After loop"); 上面的代码片段的结果,你会看到的是 1 2 3 4 After loop 我的预期是 After loop 1 2 3 4 我认为会发生的是函数asyncForEach将被添加到调用堆栈中,并且对于数组中的每个元素,setTimeout中的callback将被推送到callback队列。 Console.log(“After循环”); 将会被打印出来,然后调用堆栈将被清空,接下来所有的callback将被逐一执行。 但似乎并非如此。 谁能解释一下? 谢谢。

NodeJS:阻塞作业的asynchronous映射

让我们举一个例子,我有一个巨大的数组被串化的JSON。 我想遍历这个数组,并使用JSON.parse(阻止事件循环)将所有string转换为JSON。 var arr = ["{…}", "{…}", … ] //input array 这是第一种方法(可能会阻塞事件循环一段时间): var newArr = arr.map(function(val){ try{ var obj = JSON.parse(val); return obj; } catch(err){return {};} }); 第二种方法是使用async.map方法(与第一种方法相比,这会更有效吗?): var newArr = []; async.map(arr, function(val, done){ try{ var obj = JSON.parse(val); done(null, obj); } catch(err){done(null, {});} }, function(err, results){ if(!err) newArr = results; } ); 如果第二种方法相同或几乎相同,那么在node.js中这样做的有效方式是什么? […]

Node.JS:forEach vs for循环asynchronous性质

for(var i=0;i<50;i++) { functionWrappingAsycfuncs(i) } var nums = [0,1…50] nums.forEach(functionWrappingAsyncfuns) functionWrappingAsycfuncs(i){ readFileAsync(i,function(){ console.log(i); }); } 在上面的函数中,在for循环中运行它的预期性质是50 50次? 但随着forEach它logging1 2 3 …. 这两个实现看起来都一样,但是确实有不同的任务第一个函数调用所有asynchronous函数,0到50作为参数,但并不等待callback完成 但第二个(在我的项目之一)似乎等待callback,并继续在数组中的下一个项目? 他们都一样吗?

Node.js的process.nextTick仍然阻止服务器获取请求

我得到这段代码: import http from 'http'; function compute() { let [sum, i] = [1, 1]; while (i<1000000000) { 5*2 i++; } console.log("good"); process.nextTick(compute); } http.createServer((request, response) => { response.writeHead(200, {'Content-Type': 'text/plain'}); response.end('Hello World'); }).listen(5000, '127.0.0.1'); http.request({hostname: '127.0.0.1', port: 5000}, (response) => { console.log("here !"); }).end(); compute(); 输出的总是:“好,”好“…和HTTP请求没有被调用。我认为process.nextTick应该解决这个问题,但服务器仍然被阻止。为什么?我该如何解决它?

node.js中的事件循环是什么意思? javascript事件循环或libuv事件循环?

在Node.js中,我们讨论了事件循环,所以我想知道我们正在讨论哪个事件循环,Javascript事件循环或libuv事件循环? 我猜libuv事件循环提供了多路复用I / O操作系统的抽象? 我对吗? 如果不是,请解释这个东西是如何工作的? 我需要一些内部知识,我知道事件循环是什么,我只想知道它是如何连接的?

如何利用JavaScript和Node.js中的事件循环?

事件循环的概念是一般还是特定于语言? 我正在寻找具体的解释与例子来清楚地理解以下内容: 1.它是如何工作的? 如何/何时应该/可以利用JavaScript中的事件循环? 在ECMAScript-6/2015中引入的有关事件循环的任何更改? 更新:没有缺乏答案,但我正在寻找一个易于理解的定义与例子。 附录: 考虑下面的代码: var list = readHugeList(); var nextListItem = function() { var item = list.pop(); if (item) { // process the list item… setTimeout( nextListItem, 0); } }; 假设setTimeout()在这里使用事件循环来防止计算器溢出是否正确? 我读了这个代码的解释: 堆栈溢出被消除,因为事件循环处理recursion,而不是调用堆栈。 更新2 在上面的代码中给出的setTimeout()的完整解释如下: 堆栈溢出被消除,因为事件循环处理recursion,而不是调用堆栈。 当nextListItem运行时,如果item不为null,则将超时函数(nextListItem)推送到事件队列中 ,并且函数退出,从而使调用堆栈清空。 当事件队列运行超时事件时 ,下一个项目被处理,一个计时器被设置为再次调用nextListItem。 因此,该方法从开始到结束处理而没有直接recursion调用,因此无论迭代次数如何, 调用栈都保持清晰 。 上述解释中的矛盾和答案使这一切更加难以理解。

node.js和setTimeout和setInterval – 了解事件循环

为了理解事件循环和函数setTimeout和setInterval,我编写了下面的程序。 该程序的输出是不同于我的预期: 输出是: In F In L Padalia outside all callback1 callback2 From Interval:0 From Interval:1 From Interval:2 From Interval:3 问题: 为什么“全部”不是先执行? 为什么间隔总是最后执行? 有人可以向我解释整个程序的执行吗? 在退出程序之前等待一段时间,为什么? 程序: var Fname = undefined; var Lname = undefined; var count = 0; function F(callback){ console.log("In F"); Fname = "Rushabh"; if(Fname != undefined && Lname != undefined) { console.log(Fname); } […]

事件循环作为语言结构公开的其他语言(框架)?

在http://nodejs.org/#about它说以下内容: “Node在devise上类似于Ruby的事件机器或者Python的Twisted系统,并且受到其影响。Node将事件模型进一步提升 – 它将事件循环呈现为一种语言结构,而不是一个库。 还有其他的框架或语言同样暴露事件循环?

在逻辑上什么是线程中的事件循环?

我遇到了node.js和python's tornado与Apache 。 他们说 : Apache为每个连接创build一个线程。 Node.js & tornado实际上是在线程上进行事件循环,而单个线程可以处理多个连接。 我不明白,逻辑上是一个线程的孩子。 在计算机科学方面: 进程具有隔离内存,并与上下文切换共享CPU。 线程划分一个进程。 因此,具有多个控制点的过程是由多个线程实现的。 现在, 什么event loop在一个线程下工作? 如何处理一个线程控制下的不同连接? 更新: 我的意思是如果在一个线程下有3个套接字进行通信,那么1个线程怎样才能与3个套接字进行通信,而不会让任何人等待呢?

Node.js能否成为MEAN栈的瓶颈?

如果我正在使用MEAN堆栈编写应用程序,并且数据库已经足够优化以至几乎不会成为瓶颈,那么由于站点stream量和/或并发用户的数量,Node.js本身是否会成为瓶颈? 这完全是从Node.js作为一个asynchronous单线程事件循环的angular度来看的。 Node.js开发的第一条原则之一是避免编写执行CPU密集型任务的代码。 比方说,如果我不得不后处理从MongoDB返回的数据,而且这些数据的CPU占用率还是很高的话,那么听起来好像应该由位于Node.js和MongoDB之间的一个服务层来处理,而不是用相同的CPU专用到Node.js 诸如process.nextTick()类的技术process.nextTick()理解,更重要的是要意识到何时使用它们。 原谅我这种边缘咆哮,但我真的想要更好地了解Node.js的优点和缺点。