gpt4 book ai didi

Javascript - 为什么这段代码会阻塞?

转载 作者:行者123 更新时间:2023-11-30 10:37:19 24 4
gpt4 key购买 nike

我不明白为什么这段代码会阻塞。我使用 nodejs 异步函数,但现在我想弄清楚非阻塞编程的本质是什么,以及如何实现它们。这是我认为的方式,但它仍然阻塞。

   var async_func = function(x, func) {
func(x+5);
};

setTimeout( async_func(5, function(number) {
for (var x = 0; x < 1000000000; x++) {;}
console.log(number);
}), 3000);

console.log("done");

最佳答案

这是在使用 setTimeout() 时以及在您希望使用参数调用函数的地方传递函数引用时的常见错误。这行代码:

setTimeout( async_func(5, function(number) {

立即执行 async_func(),然后将其返回结果(不是函数)传递给 setTimeout(),这不是您想要的。您想要将函数引用传递给 setTimeout(),以便 setTimeout() 稍后可以像这样调用该函数:

var async_func = function(x, func) {
func(x+5);
};

setTimeout( function() {
async_func(5, function(number) {
for (var x = 0; x < 1000000000; x++) {;}
console.log(number);
});
}, 3000);

console.log("done");

或者,有时将定时器回调函数设为独立的不带参数的函数会更容易理解。

function async_func(x, func) {
func(x+5);
}

function timer_func() {
async_func(5, function(number) {
for (var x = 0; x < 1000000000; x++) {;}
console.log(number);
});
}

setTimeout(timer_func, 3000);

console.log("done");

关于Javascript - 为什么这段代码会阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13169418/

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