我对节点中的“非阻塞”的理解是否正确?
人们有时会把下面的callback模式称为asynchronous。
function beAsync(msg, cb){ cb(msg); } beAsync("a", function(msg){ console.log(msg); }); console.log("b");
什么人有时会说beAsync
允许其余的代码运行,然后callback发生在准备就绪时。
当我最初调用beAsync
和真正的asynchronous函数(如fs.readFile
,必须有一些代码同步运行, 然后发生了一些事情 ,允许readFile
代码允许其余的代码被允许运行。
我正确地说,代表callback的东西进入一个低于JavaScript的循环吗?
所以beAsync的修改将包括一个setTimeout。
function beAsync(msg, cb){ setTimeout( function(){ cb(msg) }, 1); }
所以setTimeout和readFile的内部可以讲一个JavaScript所在的层? 说到这个低层是在JavaScript中实现非阻塞代码的唯一方法?
说到这个低层是在JavaScript中实现非阻塞代码的唯一方法?
这是正确的。 节点只是等式的一部分。 框架本身大量使用线程来pipe理可能会阻塞的事物,如IO。 看着
当我最初调用beAsync和真正的asynchronous函数(如fs.readFile)时,必须有一些代码同步运行,然后发生了一些事情,允许readFile代码允许其余的代码被允许运行。
这不是很详细,但从高水平来看是正确的。 每当你发起一些asynchronous的工作,并给这个方法一个callback,就有工作来完成你的callback与工作的结果。