gpt4 book ai didi

javascript - 如何在 Javascript 中编写非阻塞回调?

转载 作者:行者123 更新时间:2023-12-03 10:30:17 25 4
gpt4 key购买 nike

这是我正在尝试的一些代码:

startTask();

function startTask(){
console.log('startTask enter');
startLongTask(1, function(){
console.log('long task complete');
});
console.log('startTask exit');
}

function startLongTask(i, callback) {
while (i++ < 10000){
console.log(i);
}
callback();
}

这是输出(省略了大系列的数字):

startTask enter
2
3
4
5
6
7
8
9
10
long task complete
startTask exit

很明显,如果我有一个长时间运行的操作,它是同步的。这就像在 startTask 中内联 startLongTask 一样。如何修复此回调为非阻塞。我期望的输出是:

startTask enter
startTask exit
2
3
4
5
6
7
8
9
10
long task complete

最佳答案

纯 Javascript 代码无法在纯 JS 中创建新的异步操作,因为 Node.js 中的 V8 解释器不会为您提供成熟的线程。

诸如 Node.js 中的 fs 模块之类的库从 native 操作(JS/V8 世界之外)获取异步行为,并通过异步接口(interface)连接到 JS 引擎。

也就是说,您可以通过使用一些非 JS 代码在 Node.js 的后台运行操作。您可以启动另一个进程,您可以使用各种支持其他执行线程的附加模块等...所有这些都将超出纯 Node.js Javascript 的范围,以便提供异步接口(interface)。

如果您的任务可以分成短 block ,您还可以通过在连续计时器上执行少量工作来模拟异步操作(这也是浏览器中的常见解决方法)。

关于javascript - 如何在 Javascript 中编写非阻塞回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29246798/

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