问题:(DRIVING.search是异步操作)

for循环中做异步操作会导致aDistances数组里边的数据全部都是从A_SHOP_INFO数组中最后一条数据获取的值。

var iIdx = 0;
for(var i=0, len=A_SHOP_INFO.length; i<len; i++){
var shopInfo = A_SHOP_INFO[i];
DRIVING.search(new AMap.LngLat(shopInfo.shop_location_long,shopInfo.shop_location_lat), new AMap.LngLat(myLnglat[0],myLnglat[1]), function(status, result){
var distance = new O_DISTANCE_INFO();
distance.distance = result.routes[0]["distance"];
distance.shop_id = shopInfo.shop_id;
distance.shop_location_long = shopInfo.shop_location_long;
distance.shop_location_lat = shopInfo.shop_location_lat;
distance.shop_location_format_str = shopInfo.shop_location_format_str;
// aDistances[aDistances.length] = distance;
aDistances.push(distance);
iIdx++;
if(iIdx == A_SHOP_INFO.length){ // 与所有店铺导航距离计算完毕
mylog("店铺距离数组");
mylog("'"+JSON.stringify(aDistances)+"'");
// 计算距离最近的店铺
//mw_cal_min_distance(aDistances) ;
}
});
}

解决办法:可以用$.each来代替for循环

 //定义变量来计算算出了几个距离
var iIdx = 0;
//这里不使用for循环,是因为for循环中发生了异步请求之后,会导致所有异步请求成功之后的shopInfo都是最后一条数据。
$.each(A_SHOP_INFO, function(i,shopInfo){
DRIVING.search(new AMap.LngLat(shopInfo.shop_location_long,shopInfo.shop_location_lat), new AMap.LngLat(myLnglat[0],myLnglat[1]), function(status, result){
var distance = new O_DISTANCE_INFO();
distance.distance = result.routes[0]["distance"];
distance.shop_id = shopInfo.shop_id;
distance.shop_location_long = shopInfo.shop_location_long;
distance.shop_location_lat = shopInfo.shop_location_lat;
distance.shop_location_format_str = shopInfo.shop_location_format_str;
// aDistances[aDistances.length] = distance;
aDistances.push(distance);
iIdx++;
if(iIdx == A_SHOP_INFO.length){ // 与所有店铺导航距离计算完毕
mylog("店铺距离数组");
mylog("'"+JSON.stringify(aDistances)+"'");
// 计算距离最近的店铺
// mw_cal_min_distance(aDistances) ;
}
});
});

  

JavaScript for循环里边异步操作问题。的更多相关文章

  1. 6.Javascript如何处理循环的异步操作

    前沿:参考ES6语法的async/await的处理机制 先上一段代码 function getMoney(){ var money=[100,200,300] for( let i=0; i<m ...

  2. c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)

    c#封装DBHelper类   public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...

  3. 一篇文章图文并茂地带你轻松学完 JavaScript 事件循环机制(event loop)

    JavaScript 事件循环机制 (event loop) 本篇文章已经默认你有了基础的 ES6 和 javascript语法 知识. 本篇文章比较细致,如果已经对同步异步,单线程等概念比较熟悉的读 ...

  4. JavaScript 事件循环

    JavaScript 事件循环 事件循环 任务队列 async/await 又是如何处理的呢 ? 定时器问题 阻塞还是非阻塞 实际应用案例 拆分 CPU 过载任务 进度指示 在事件之后做一些事情 事件 ...

  5. javascript之循环保存数值

    javascript之循环保存数值 语言都是相通的,这句话在我学javascript时有的深刻的意识.js中的for循环与java中的for循环有很大相似之处. 先看下面这段代码 for(var i= ...

  6. JavaScript的循环语句

    JavaScript的循环语句 1.JavaScript的循环语句 (1)for循环语句 - 循环代码块一定的次数: (2)for/in循环语句 - 循环遍历对象的属性: (3)while循环语句 - ...

  7. JavaScript while 循环

    JavaScript while 循环的目的是为了反复执行语句或代码块. 只要指定条件为 true,循环就可以一直执行代码块. while 循环 while 循环会在指定条件为真时循环执行代码块. 语 ...

  8. JavaScript for循环实现表格隔行变色

    本代码主要演示的是for循环, <!doctype html> <html lang="en"> <head> <meta charset ...

  9. JavaScript数组循环

    JavaScript数组循环 一.前言 利用Javascript map(),reduce()和filter()数组方法可以遍历数组.而不是积累起来for循环和嵌套来处理列表和集合中的数据,利用这些方 ...

随机推荐

  1. 第2月第4天 injection plugin for xcode

    http://www.cocoachina.com/ios/20140530/8623.html http://www.jianshu.com/p/27be46d5e5d4

  2. svn 设置post-commit后 报错svn: Can't convert string from 'UTF-8' to native encoding

    文件语言编码和系统冲突导致的错误,设置svn目录下hooks/post-commit加上: export LANG=zh_CN.GB2312 或者: export LANG=zh_CN.UTF-8

  3. Redhat EL安装curses

    1.下载curses安装包 http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.6.tar.gz2. tar -zxvf  nurses-5.6.tar.gz 3 ...

  4. Word有用的快捷键

      1.shift+上下左右,可以用键盘从当前光标位置选择文本.可以配合各种其他导航键,比如ctrl+上下左右,Home, End, PageUp/Down. 2.选择文本后,按F2,光标会自动变成虚 ...

  5. CSS继承总结

    CSS的一个重要特征就是继承,它是依赖于祖先-后代的关系的.继承是一种机制,它允许样式不仅可以应用于某个特定的元素,还可以应用于它的后代. CSS可以继承的属性有: 1.文字相关:font-famil ...

  6. 【浅墨Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 & 第一个Shader的书写

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨)  ...

  7. IC/RFID/NFC 关系与区别

    IC卡 (Integrated Circuit Card,集成电路卡) 有些国家和地区也称智能卡(smart card).智慧卡(intelligent card).微电路卡(microcircuit ...

  8. 2016年10月16日--ArrayList集合、特殊集合

    ArrayList集合 使用前引用 using System.Collections; ArrayList集合 实例化.初始化 ArrayList al = new ArrayList(); Arra ...

  9. SPOJ 375 Query on a tree

    Description 给出一个树,每条边有边权,支持两种操作,询问 \(u,v\) 路径上边权最大值,修改第 \(i\) 条边的边权,\(n\leqslant 10^4,T\leqslant 10\ ...

  10. ja

    import java.util.*; class animal{     void cry(){            }     void get_animal_name(){           ...