javascript - while 循环中的 setTimeout

标签 javascript while-loop settimeout

我已经搜索了如何将 setTimeOut 与 for 循环一起使用,但是关于如何将它与 while 循环一起使用的内容并不多,而且我不明白为什么应该有很多无论如何区别。我已经编写了以下代码的一些变体,但这个循环似乎会使浏览器崩溃:

while(src == '')
{ 
    (function(){
        setTimeout(function(){
        src = $('#currentImage').val();
        $("#img_"+imgIdx).attr('src',src);
        }, 500);
     });
} 

为什么?

基本上我有一个动态创建的图像,其 source 属性有时需要时间来加载,所以在我可以显示它之前,我需要继续检查它是否已加载,并且只有当它的路径在 $ 中可用时('#currentImage'),然后显示它。

这段代码在我使用 while 循环之前和直接使用时都运行良好

setTimeout(function(){
    src = $('#currentImage').val();
    $("#img_"+imgIdx).attr('src',src);
}, 3000);

但我不想让用户等待 3 秒,如果加载可能完成得更快,因此我将 setTimeOut 放在 while 循环中并缩短它的间隔,这样我仅每半秒检查一次加载的路径。这有什么问题吗?

最佳答案

while 循环正在制造麻烦,就像 jrdn 指出的那样。也许您可以将 setInterval 和 setTimeout 结合起来,一旦 src 被填满,就清除间隔。我在此处放置了一些示例代码以提供帮助,但不确定它是否完全符合您的目标:

    var src = '';
    var intervalId = window.setInterval(
        function () {

            if (src == '') {
                setTimeout(function () {
                    //src = $('#currentImage').val();
                    //$("#img_" + imgIdx).attr('src', src);
                    src = 'filled';
                    console.log('Changing source...');
                    clearInterval(intervalId);
                }, 500);
            }
            console.log('on interval...');
        }, 100);

    console.log('stopped checking.');

希望这对您有所帮助。

关于javascript - while 循环中的 setTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12996193/

相关文章:

javascript - amcharts 的 stockChart 鼠标移动监听器

javascript - 如何将文本框客户端 ID 传递给 JavaScript 函数

bash 脚本 : commands after the loop are not executed if the loop condition is false

c - Putchar、getchar、while 循环中缺少字符

php - 使用 LIMIT 计算 MySQL 记录

node.js - 当在不同的上下文中抛出异常时,setTimeout 永远不会调用

javascript - 从 Silverlight 4.0 应用程序调用 JavaScript 函数

javascript - 在 Apps 脚本中使用索引对数组进行子集化

javascript - 了解 alert() 如何影响浏览器事件循环

javascript - 在reactjs中使用setTimeout连续改变状态