带有布尔中断的 while 循环内的 setTimeout() 方法

setTimeout() method inside a while loop with boolean break

我有一个函数“fill”,它用数字填充一个数组,只要这个数组有空值,我就想这样做。但是它希望每个数字延迟一秒。

我找到了 一个关于如何将 setTimeOut 与循环一起使用的解决方案,但我的问题是不同的,因为循环会根据布尔值中断。这是我到目前为止得到的,使用相同的想法:

  var fillCache = function () {
        var i = state.cache.indexOf("")
        while (i !== -1) {
            (function (i) {
                setTimeout(function () { fill }, 1000)
            })
            i = state.cache.indexOf("")
        }
    }

我得到的是第 4 行的错误提示“期望一个赋值或函数调用,而不是看到一个表达式”。有什么想法吗?还是我完全错了?

存在三个问题:

  1. while 是同步操作,但是您有一个异步操作要重复直到满足特定条件,因此 while 不是正确的选择.事实上,作为 ,它将阻止条件变为真,因为它是同步的且永无止境的,它永远不会让任何其他事情发生。

  2. 您永远不会在循环中调用内联调用的函数表达式。

  3. setTimeout 回调中,你永远不会 调用 fill,你只是引用它,(在这种情况下)什么都不做。

你可能想要一个 setTimeout 来调用自己,像这样:

const fillCache = function () {
    // When called, start the process
    tick();

    // Handles each tick
    function tick() {
        // Is the condition true?
        if (state.cache.indexOf("") !== -1) {
            // Not yet, call `fill`...
            fill();
            // ...and go again in a second
            setTimeout(tick, 1000);
        }
    }
};