Javascript node.js事件循环如何记住在长时间运行的操作完成后需要回调?

Javascript node.js事件循环如何记住在长时间运行的操作完成后需要回调?,javascript,node.js,multithreading,Javascript,Node.js,Multithreading,我是NODE.JS的新手。 我读到node.js中只存在单事件循环(作为它的单线程) 现在假设,情况是这样的,最终用户发出请求,下面的代码是用户试图运行的模块的一部分: ....some code before...... longRunningOperation(argumentsForLongOperation, callbackMethod(argumentsForCallBack)); ....some code after...... 由于nodejs是异步的,事件循环将调用

我是NODE.JS的新手。 我读到node.js中只存在单事件循环(作为它的单线程)

现在假设,情况是这样的,最终用户发出请求,下面的代码是用户试图运行的模块的一部分:

....some code before......    
longRunningOperation(argumentsForLongOperation, callbackMethod(argumentsForCallBack));
....some code after......
由于nodejs是异步的,事件循环将调用
longRunningOperation
,并移动到下一行代码以执行模块中的任何代码

现在,当
longRunningOperation
返回时,我的事件循环如何知道它现在应该在
longRunningOperation
返回时运行回调

在java中,我们有方法堆栈,线程被卡在调用
longRunningOperation
的位置,因此当函数返回时,线程从完成调用堆栈开始恢复


我的问题是,在node.js中,事件循环如何知道
longRunningOperation
已返回,它现在需要调用
callBack()
函数?

它不记得了。
longRunningOperation
本身需要告诉事件循环a)它保留
callbackMethod
,b)当它完成时,应该执行回调。这就是为什么只有本机函数是异步的,而普通javascript代码无法访问事件循环。而且它们也会立即返回,它们通常是异步的,即使在系统级别上也是如此。如果没有,他们将不得不为计算生成一个线程(仍然会从生成中立即返回)。

我明白了这一点:它不记得了。longRunningOperation本身需要告诉事件循环a)它保留callbackMethod,b)完成后应该执行回调。但是你能解释一下你所说的本机函数(它是指本机(C++,python)代码)和普通JS代码是什么意思吗。用正常的JS代码来做,你是指浏览器中运行的代码还是NoDE.js模块中的一个?是的,原生的是在本地C++代码中,使用节点/V8 API。“普通”js代码是由用户编写并由节点运行的所有代码。