ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript-setTimeout / Loop…仍然感到困惑

2019-10-13 13:38:22  阅读:181  来源: 互联网

标签:javascript for-loop settimeout


因此,从昨天下午开始,我就一直在这里工作.我已经完成了基本代码的各种迭代,试图获得所需的结果(我希望每隔xx ms依次删除标记),但是没有任何效果.我得到的结果是要么一次全部完成,要么根本不执行.我相当确定“根本不存在”问题是由于我更正并立即获得“全部”语法错误而引起的.

所以这是功能…

    function marker(location) 
    {

        geocoder = new google.maps.Geocoder();
        var latlng = new google.maps.LatLng(37.5, -98.35);
        var mapOptions = 
        {
            zoom: 5,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        }

        map = new google.maps.Map(document.getElementById('googleMap'), mapOptions);

        var infowindow = new google.maps.InfoWindow(), marker, i;

        for (i = 0; i < location.length; i++) 

        {


            marker = new google.maps.Marker(
            {
                position: new google.maps.LatLng(location[i][1], location[i][2]),
                animation: google.maps.Animation.DROP,
                map: map
            }
            );


            google.maps.event.addListener(marker, 'click', (function (marker, i) 
            {

                return function () 
                {
                    infowindow.setContent(location[i][0]);
                    infowindow.open(map, marker);
                }

            }
            )(marker, i));


        }

    }

我认为我应该做的是这样,…

        for (i = 0; i < location.length; i++) 

        {
           setTimeout(function() { 

            marker = new google.maps.Marker(
            {
                position: new google.maps.LatLng(location[i][1], location[i][2]),
                animation: google.maps.Animation.DROP,
                map: map
            }
            );


            google.maps.event.addListener(marker, 'click', (function (marker, i) 
            {

                return function () 
                {
                    infowindow.setContent(location[i][0]);
                    infowindow.open(map, marker);
                }

            }
            )(marker, i));
            }, 1000)
        }

但这是行不通的,我尝试过的其他方法也行不通.我看了很多解释,大多数解释似乎都有意义,但是我无法弄清楚这一点,我认为它更重要的是for循环.

作为示例,我还尝试过将addlistener封装在setTimeout中,以考虑是否运行addlistener代码并等待其生效.我猜我在哪里,我需要想出一种方法来打破循环,等待被调用函数返回某些东西,但是我不确定该怎么做.

如果有人能告诉我我走在正确的道路上,我将不胜感激.

解决方法:

如果您不想一次获得所有结果,则需要指定不同的时间,因为循环会立即执行,并且所有超时都是从执行时间开始计算的:

setTimeout(function() { 

}, 1000*i);

为避免所有迭代使用相同i值的问题,请使用

for (i = 0; i < location.length; i++) {
   (function(i){
       setTimeout(function() { 

       }, 1000*i);
   })(i);
}

标签:javascript,for-loop,settimeout
来源: https://codeday.me/bug/20191013/1908115.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有