gpt4 book ai didi

javascript - 为什么功能会按顺序运行,即使它们是在循环内异步调用的?

转载 作者:行者123 更新时间:2023-12-01 01:18:36 24 4
gpt4 key购买 nike

我正在创建一个包装函数,它将采用函数数组并以并行方式执行每个函数,因此考虑使用 setTimeout 但函数仍然按顺序运行。我怀疑这可能是因为调用 SetTimeout 时使用了闭包。但既然 setTimeout 是异步的,为什么它很重要呢?

// some blocking functionality
var withDelay = function (a) {
var currentTime = new Date().getTime(), delay = 5000;
while (currentTime + delay >= new Date().getTime()) {
}
console.log(a+"I am with delay");
}

// some non blocking functionality
var withoutDelay = function(a) {
console.log(a+"I am with no delay");
}

var fnArr = [withDelay, withoutDelay]; //array of functions
var args = ["Hi,"]; // arbitrary params

for( var i=0; i < fnArr.length; i++) {
var fn = fnArr[i];
(function(f,arg) {
return setTimeout(function(){ return f.apply(f,arg) },0);
})(fn,args)
}

预期输出:

Hi,I am with no delay

Hi,I am with delay

但实际输出是:

Hi,I am with delay

Hi,I am with no delay

最佳答案

JS 在单线程上运行,您的函数不会并行运行。它一次只会运行一个。由于您已将这两个函数安排为 0 延迟,与 fnArr 数组即第一个函数一样。 withDelay 将首先运行。只有当它完成执行时,第二个函数withoutDelay才会开始执行。 setTimeout 不会保证您在提供的时间间隔后执行,它是函数执行的最小时间间隔。您可以阅读有关 setTimeout here 的更多信息。

关于javascript - 为什么功能会按顺序运行,即使它们是在循环内异步调用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54476377/

24 4 0
文章推荐: javascript - 从 SAPUI5 中的