gpt4 book ai didi

javascript - Javascript 异步回调背后的机制

转载 作者:太空宇宙 更新时间:2023-11-04 02:58:59 24 4
gpt4 key购买 nike

我在理解 JS 回调机制时遇到了一些困难。我很清楚如何在 JS 中使用回调,但我不明白回调如何异步。

例如,如果我的理解是正确的,回调的本质是:

db.query(param1, param2,callback_fn1(){..});

db.query() 的实现类似于:

 db.prototype.query = function(p1 , p2 , callback ){
//some code
callback();
}

上述实现如何使db.query成为异步函数?这是否意味着一个名为callback的函数被传递给query并且该函数在query内部被调用?看起来 query 只是另一个同步函数。有人可以帮助我理解我在这里忽略的内容吗?谢谢!

最佳答案

您所显示的代码示例实际上仍然是同步的,因为被指示立即运行。异步回调是不需要立即执行的回调,因此在您指示它运行之前它不会阻塞事件循环。

Node.js 中最常见的方法是使用 process.nextTick()当事件循环调用堆栈为空时运行指定的函数。这是一个例子:

var async = function(args, callback) {
// do some work
process.nextTick(function() {
callback(val);
});
};

然后我们这样调用该函数:

async(args, function(val) {
console.log(val);
});
console.log('end');

在此示例中,函数 async()console.log('end')被添加到调用堆栈中。一旦这两个函数运行,调用堆栈就会清空,一旦它为空,console.log(val)然后运行。

如果您仍然感到困惑,请考虑 process.nextTick()作为此代码的优化版本:

var fn = function() {};
setTimeout(fn, 0);

它的基本意思是“当你不忙的时候尽快运行这个函数”。

关于javascript - Javascript 异步回调背后的机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19080378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com