Ada*_*ite 5 javascript asynchronous node.js
请,只是为了清除我头脑中的一些东西......
我习惯在库中使用异步函数编写,但我如何编写自己的函数呢?
为了说明我的问题,我编写了一个名为'MadMathz'的模块
我知道以下是异步函数的示例用法:
//load module
var mM = require('./MadMathz');
//perform a function
mM.async_function_addthree(12, function(result) {
console.log(result)
});
//do something straight afterwards
console.log('Logging this straight after instead of waiting for computation');
Run Code Online (Sandbox Code Playgroud)
我知道函数的第二个参数是回调,但是如何定义'async_function_addthree'这样的函数?让我们说这个例子的目的是async_function_addthree只是在第一个参数上加3.
我只是迷惑自己,试图写出我认为可能的东西.我完全走错了路吗?我觉得我接近使用node.js,但这需要清理.
如果可能的话,请解释而不是将我链接到某处.我相信其他人会受益于这个问题.
jAn*_*ndy 17
实际上,在没有任何进一步描述或要求的情况下创建" 异步 "功能听起来有点奇怪.通常,用法是避免长时间阻塞.因此,如果我们有一个触发数据库查询的函数,并且我们想在完成时调用另一个函数,那么在作业完成后应该调用该函数,并且原始函数会立即将控制流返回给节点(ECMAscript) .
所以,如果我们有一个类似的结构
function someJob( callback ) {
// heavy work
callback();
}
Run Code Online (Sandbox Code Playgroud)
现在,这段代码仍然非常同步.为了使其处于异步状态,我们可以调用节点的process.nextTick方法
function someJob( callback ) {
// heavy work
process.nextTick( callback );
}
Run Code Online (Sandbox Code Playgroud)
现在发生的是,Node将在稍后的运行中通过其eventloop 执行该回调方法(并且它也有点聪明).Eventho nextTick声称效率要高得多setTimeout,几乎是同样的交易(来自ECMAscript编码员的观点).所以在浏览器中我们可以像
function someJob( callback ) {
// heavy work
setTimeout( callback, 0 );
}
Run Code Online (Sandbox Code Playgroud)
如果说上面的示例方法根本没有多大意义,那么你会是正确的,因为异步状态发生在繁重的工作之后.嗯,是的.事实上,你需要将沉重的部分分解成更小的和平,并利用相同的想法.nextTick()来使这真正有效.
这也是我在开始时混淆的原因,实际上每个任务都已经为你提供了回调的可能性.
| 归档时间: |
|
| 查看次数: |
6290 次 |
| 最近记录: |