等待几秒钟再执行下一步操作 - Javascript

4

如代码中所注释的那样,在检查writeFile(lFileData)之后,我需要等待一段时间才能检查else if。该如何实现?

for(var i=0;i<mLocalStorageCount;i++)
        {

            if(i <= 1)
            {

                writeFile(lFileData); //This action takes a lot of time with its call backs. I need a wait here. 

            }

            else if(i > 1 && i <=3)
            {
                     someOtherfun()

            }

你能发更多的代码吗?循环将需要重构为回调链,因此我们需要知道内部发生的一切(例如,lFileData 可能在每次迭代中被修改,否则您将始终将相同的数据写入文件)。 - Frédéric Hamidi
5个回答

2
你可以在elseif函数中使用setInterval。
setTimeout(function,3000);

1

这意味着writeFile函数是异步的吗?

我会在writeFile函数本身中创建一个回调函数,然后执行someOtherfun()。

编辑:由于您不能真正在回调函数中完成迭代的其余部分(刚才所说的),因此您可以尝试像这样做:

function writeFile () {
    ... here goes your function ...
    if ( finished ) {
        window.finished = true;
    }
}

for (yourForCondition) {
    if () {
        window.finished = false;
        writeFile(); 
        while (!window.finished) {}
    }

    if () {
        someOtherFun();
    }
}

它有点脏,但应该能工作。它会循环直到writeFile()说他完成了。

Edit2: 可能不起作用,因为“while (!window.finished) {}”是一个忙等待循环,会将一个核心占满100%,并且可能会使浏览器询问用户是否应该终止脚本。- Frédéric Hamidi "


实际上,如果调用了writeFile(),则else if部分不应该运行。看起来提问者想要延迟执行他没有展示的进一步代码。 - Frédéric Hamidi
嗯,是的,我的直觉告诉我在“writeFile()”函数中使用他异步执行的任何回调。 - Martin
@FrédéricHamidi 我的问题是,当i = 1时,会调用writeFile(),而它是异步的。由于某些其他问题,我无法在回调函数中调用someOtherFun()。在这里循环将继续进行,当i变为2时,它将进入第二个条件,但我需要确保writeFile已完成。 - user1654414
1
while (!window.finished) {} 是一个忙等待循环,会将一个核心占用到100%,可能会使浏览器询问用户是否应该终止脚本。 - Frédéric Hamidi
那如果不把它拆分成多个函数并且使用回调、setTimeout或Intervals的话,我看没有其他的可能性。 - Martin

1
你可能需要重新编写代码,将想要延迟执行的部分放在它自己的函数中。然后通过调用 performFunctionXAfterDelay() 函数来调用该函数:
function performFunctionXAfterDelay() {
  // 1000 ms delay
  window.setTimeout(functionX,1000)

}

function functionX() {
   // YOUR TIME DELAYED CODE
}

0
var t = setInterval("javascript expression", milliseconds);

clearInterval(t);

你可以使用setInterval

0

嗨,我认为在执行“else if(i > 1 && i <=3)”代码之前没有必要等待。因为如果“if(i <= 1)”条件为真并且执行了“writeFile(lFileData);”,控制权将不会给予“else”部分,也不会执行“someOtherfun()”。 :)


是的,但它在一个for循环中,所以在第二次迭代中i已经增加了,所以很快就会执行。 - Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接