JavaScript for循环里边异步操作问题。
问题:(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循环里边异步操作问题。的更多相关文章
- 6.Javascript如何处理循环的异步操作
前沿:参考ES6语法的async/await的处理机制 先上一段代码 function getMoney(){ var money=[100,200,300] for( let i=0; i<m ...
- c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)
c#封装DBHelper类 public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...
- 一篇文章图文并茂地带你轻松学完 JavaScript 事件循环机制(event loop)
JavaScript 事件循环机制 (event loop) 本篇文章已经默认你有了基础的 ES6 和 javascript语法 知识. 本篇文章比较细致,如果已经对同步异步,单线程等概念比较熟悉的读 ...
- JavaScript 事件循环
JavaScript 事件循环 事件循环 任务队列 async/await 又是如何处理的呢 ? 定时器问题 阻塞还是非阻塞 实际应用案例 拆分 CPU 过载任务 进度指示 在事件之后做一些事情 事件 ...
- javascript之循环保存数值
javascript之循环保存数值 语言都是相通的,这句话在我学javascript时有的深刻的意识.js中的for循环与java中的for循环有很大相似之处. 先看下面这段代码 for(var i= ...
- JavaScript的循环语句
JavaScript的循环语句 1.JavaScript的循环语句 (1)for循环语句 - 循环代码块一定的次数: (2)for/in循环语句 - 循环遍历对象的属性: (3)while循环语句 - ...
- JavaScript while 循环
JavaScript while 循环的目的是为了反复执行语句或代码块. 只要指定条件为 true,循环就可以一直执行代码块. while 循环 while 循环会在指定条件为真时循环执行代码块. 语 ...
- JavaScript for循环实现表格隔行变色
本代码主要演示的是for循环, <!doctype html> <html lang="en"> <head> <meta charset ...
- JavaScript数组循环
JavaScript数组循环 一.前言 利用Javascript map(),reduce()和filter()数组方法可以遍历数组.而不是积累起来for循环和嵌套来处理列表和集合中的数据,利用这些方 ...
随机推荐
- 【Solr】Solr的安装部署
目录 Solr安装部署 Solr Web界面分析 回到顶部 solr安装和部署 solr下载 http://lucene.apache.org/ 安装solr,就是去部署它的war包,war包所在的位 ...
- SQL Server数据库邮件配置
一.数据库邮件介绍 数据库邮件是从SQL Server数据库引擎中发送电子邮件的企业解决方案,通过使用数据库邮件,数据库应用程序可以向用户发送电子邮件.邮件中可以包含查询结果,还可以包含来自网络中任何 ...
- PHP安装laravel(win+linux)
作为一名不优秀的程序猿,忙碌的四月终于结束了,五一大假的最后一天,终于有时间来整理整理这段时间的收获了. 一.laravel介绍 首先看看http://www.sitepoint.com/网站做的一个 ...
- PHP基础之 数组(二)
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- gulp常用插件
本人就职于一家互联网小公司,根据自己的项目纪录一下常用的gulp插件,项目不是很大! 文章目录 1. gulp-load-plugins 2. yargs 3. del 4. gulp-filter ...
- 热更新脚本C#light,ulua,Scorpio性能比较
http://www.unity蛮牛.com/thread-32861-1-1.html 测试环境: unity4.5.2 三个脚本全是源码导入 PC :处理器 Intel(R) Core(TM) ...
- thinkphp的CURD操作
增 //a字段是主键 $data['b'] = 'bbb'; $data['c'] = 'c'; $new_id = M('test')->data($data)->add(); //ec ...
- 《C和指针(Pointer on c)》 学习笔记(转自:http://dsqiu.iteye.com/blog/1687944)
首先本文是对参考中三个连接的博客进行的整理,非常感谢三位博主的努力,每次都感叹网友的力量实在太强大了…… 第一章 快速上手 1. 在C语言中用/*和*/来注释掉这段代码,这个实际上并不是十分的安全, ...
- TMethod
onclick是TNotifyEvent类型; type TNotifyEvent = procedure(Sender: TObject) of object; 就是说他是一个过 ...
- yuv转bmp
#ifdef _INTERFACE_H #error _INTERFACE_H has be exsisted #else #define _INTERFACE_H #include "st ...