从异步移动到同步

时间:2013-11-18 14:40:21

标签: javascript

我有这个小样本结构代码:

function SingleProcess() 
{
    var value1  = item[idx].getAttribute("value1");
    var value2  = item[idx].getAttribute("value2");
    var value3  = item[idx].getAttribute("value3");

    idx -= step;

    return; 
}

function timedChunk(process) 
{
    setTimeout(function() 
    {

        do {
            process.call();
        } while (idx > 0 && (+new Date() - start < 50));

        if (idx > 0) 
        {
            setTimeout(arguments.callee, 25);
        }

        if (idx == 0) 
        {
            [...]

            EndProcessing();
        }

    }, 25);
}


$(window).load(function() {
{
    [...]
    idx= 0,

    for (var i = 0; i < items.length; i++) 
    {
        [...]

        timedChunk(SingleProcess);

    }
});

之前我没有for(var i = 0; i&lt; items.length; i ++)这样的事情所以timedChunk调用总是一次只进行一次。现在我需要为数组项中的每个项做多个timedChunk ...有没有办法让timedChunk保持在进程中直到(idx == 0)然后处理下一个项而不重新完全实现这些函数的内容?...

提前致谢!!

干杯, 路易

1 个答案:

答案 0 :(得分:0)

据我所知Javascript,这是不可能的。 setTimeout和setInterval是异步的。并且Javascript没有真正的sleep()函数,因此您无法在没有繁忙等待的情况下重建同步setTimeout!

忙着等待

首先,不要使用。忙碌的等待意味着你让程序做一些无用的事情,直到你想等待的时间结束。在这个时候浏览器会冻结。

我们正在使用异步Javascript函数来重新思考逻辑。 Javascript是单线程事件驱动的。它不像其他语言,你可以等待threadend。

我建议重新考虑你的问题并尝试解决它的事件驱动(意味着使用回调来查找必须以特定顺序执行的内容)