javascript异步调用的同步问题

最近在研究javascript,发现批量的异步处理存在同步问题,研究了半天,最终用setTimeout解决了这个问题

处理代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="BMap1.aspx.cs" Inherits="BMap1" %>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="http://api.map.baidu.com/api?v=1.2" type="text/javascript"></script>    
</head>
<body>
    <form id="form1" runat="server">       
     <script type="text/javascript">
         // 创建地址解析器实例
         var myGeo = new BMap.Geocoder();
         // 将地址解析结果显示在地图上,并调整地图视野
         var COUNT = 30;
         var num = 0;
         var bFinishOne = true;


         function btn() {    
         
             //触发地址解析         
             timeout1();
         }
         
         //批地址解析处理过程
         function timeout1() {
         
             //100ms判断一次,调用结果是否返回
             if (bFinishOne == false) {
                 setTimeout(timeout1, 100);
                 return;
             }
             //地址解析调用
             myGeo.getPoint("北京市海淀区上地10街", function(point) {


                 if (point) {
                     document.getElementById("map").innerHTML += point.lng + "----" + num ;
                     out1();
                 }


             }, "北京市");
             //已经开始一次调用,初始化bFinishOne ;
             bFinishOne = false;             
             
             //打印调用开始信息
             document.getElementById("map").innerHTML += "F_START"
             
             //所有业务调用处理完,退出
             if (num == COUNT) {
                 num = 0; 
                 return;
             }      
             //触发100ms一次的调用,启动结果返回判断流程
             setTimeout(timeout1, 100);


         }
         
         //一次调用处理完毕的回调处理
         function out1() {
             document.getElementById("map").innerHTML += "F_END" + "<br/>"
             //该次处理完,置bFinishOne为处理完状态
             bFinishOne = true; 
             num++;
             if (num == COUNT) {
                 alert("finished send!");                            
             }                  
         }         
     </script>


    <input id="Button1" type="button" value="button"  οnclick="btn();"/>
     <div id="map" style="overflow:scroll;width:500px;height:320px"></div>
    </form>
</body>

</html>



具体参见代码中的解释,处理输出如下:

F_START116.308992----0F_END
F_START116.308992----1F_END
F_START116.308992----2F_END
F_START116.308992----3F_END
F_START116.308992----4F_END
F_START116.308992----5F_END
F_START116.308992----6F_END
F_START116.308992----7F_END
F_START116.308992----8F_END
F_START116.308992----9F_END
F_START116.308992----10F_END
F_START116.308992----11F_END

。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值