拜托,只是为了澄清我脑子里的一些事情......
我习惯于在库中使用异步函数进行编写,但是如何编写自己的异步函数呢?
为了说明我的问题,我编写了一个名为“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');
我知道函数的第二个参数是回调,但是如何定义诸如“async_function_addthird”之类的函数?就本示例而言,假设 async_function_add Three 只将 3 添加到第一个参数。
我只是很困惑自己试图写出我认为可能是什么。我完全走错路了吗?我觉得我已经接近使用 Node.js 实现这一目标,但这需要澄清。
如果可能的话,请解释一下而不是将我链接到某个地方。我相信其他人会从这个问题中受益。
实际上,创建一个“”听起来有点奇怪异步" 功能没有任何进一步的描述或要求。通常,用法是为了避免长blocking期间。因此,如果我们有一个触发数据库查询的函数,并且我们想在完成后调用另一个函数,则应该调用该函数after工作完成,原始函数立即将控制流返回到Node(ECMA 脚本)。
所以如果我们有一个像这样的构造
function someJob( callback ) {
// heavy work
callback();
}
现在,这段代码仍然运行得很好同步。为了把它带入async状态,我们可以调用节点的process.nextTick
method
function someJob( callback ) {
// heavy work
process.nextTick( callback );
}
现在发生的事情是,该节点将执行该操作callback稍后运行其事件循环中的方法(并且它也这样做有点智能)。虽然nextTick
声称比setTimeout
,它几乎是相同的交易(从 ECMAscript 编码员的角度来看)。所以在浏览器中我们可以像
function someJob( callback ) {
// heavy work
setTimeout( callback, 0 );
}
如果说上面的示例方法根本没有多大意义,那么您是正确的,因为async状态发生after繁重的工作。嗯,确实如此。事实上,你需要分解重型零件分成更小的和平并利用相同的想法.nextTick()
使这真正有效。
这也是我一开始感到困惑的原因,实际上每个任务都已经为你提供了回调的可能性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)