gpt4 book ai didi

javascript - 在 Javascript 中,延迟函数是否按顺序执行?

转载 作者:可可西里 更新时间:2023-11-01 06:15:58 26 4
gpt4 key购买 nike

我的代码有可能会在短时间内连续延迟两个或多个函数。我能保证每个延迟函数都会按照我创建它们的顺序执行吗?对于我在 iOS 5 和 6 上的 Web 应用程序,我的代码的正确性依赖于按顺序执行的延迟函数。

我正在使用 Prototype's defer ,这是使用 0.01 秒的超时时间实现的。

A "deferred" function will not run immediately; rather, it will run as soon as the interpreter's call stack is empty.

根据我自己的测试,它们似乎是按照我创建它们的顺序执行的。下面确实按顺序打印出了从 0 到 99 的所有整数。

测试代码

for (var i = 0; i < 100; i++) {
(function(x) {
return function() {
console.info(x);
}
})(i).defer();
}

输出

0
1
2
...
88
99

然而,这个结果并不是决定性的。我不知道它在更深层次的功能或不同的 CPU 负载下表现如何。

最佳答案

Prototype.js 的 defer()使用 setTimeout() 作为其支持代码。

function delay(timeout) {
var __method = this, args = slice.call(arguments, 1);
timeout = timeout * 1000;
return window.setTimeout(function() {
return __method.apply(__method, args);
}, timeout);
}

//This calls Prototype's delay() function above (which calls setTimeout)
function defer() {
var args = update([0.01], arguments);
return this.delay.apply(this, args);
}

spec for setTimeout 表示订单有保证。然而,许多人声称他们的功能是乱序完成的,因此不同的浏览器可能无法正确实现规范。我假设不能保证顺序。

相反,您应该链接您的函数。所以,做类似的事情:

var funcsToRun = [];
var currFunc = 0;

//Add the functions
for ( var i = 0; i < 100; i++ )
{
funcsToRun.push( function(x) {
return function() {
console.info(x);
}
);
}

//This will chain the execution;
function chain()
{
//RUn current function
funcsToRun[ currFunc ]( currFunc++ );

//Now do next one if needed
if ( currFunc < funcsToRun.length ) chain();
}

setTimeout( chain, 10 );

关于javascript - 在 Javascript 中,延迟函数是否按顺序执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16045888/

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