var mylist =[{'id':1,'zb':'116.434446,39.90816','dis':''},{'id':2,'zb':'117.493314,40.412994','dis':''},{'id':3,'zb':'117.185697,39.109413','dis':''}]
for(var i=0;i<mylist.length;i++){
var item=mylist[i];
var result = mygetDis(myloc,item.zb);//mygetDis()为计算距离函数,使用接口获取当前位置,并根据mylist坐标计算两坐标之间距离值
result.then(res=>{
console.log(res)//控制台输出790.60Km,649.80Km,830.59Km3个值
//如何把输出的值赋给mylist里面的dis
})
}
//使赋值以后输出的mylist的dis是对应有值的
console.log(mylist)
for(var i=0;i<mylist.length;i++){
let item=mylist[i];
mygetDis(myloc,item.zb).then(res=>{
console.log(res)
item.dis = res;
})
}
result.then(res => {
item.dis = res
});
不知道你这个问题是否已经解决, 如果还没有解决的话:在这种情况下,可以使用闭包解决这个问题。闭包可以在异步函数中保存外部变量的值,并在异步函数执行完毕后访问这些值。以下是解决方案的代码:
var mylist = [{'id':1,'zb':'116.434446,39.90816','dis':''},{'id':2,'zb':'117.493314,40.412994','dis':''},{'id':3,'zb':'117.185697,39.109413','dis':''}]
for(var i=0;i<mylist.length;i++){
var item=mylist[i];
(function(item) { // 使用闭包保存item的值
var result = mygetDis(myloc,item.zb);
result.then(res=>{
item.dis = res; // 在异步函数中给item的dis属性赋值
console.log(res);
})
})(item); // 传递item给闭包
}
console.log(mylist)
在这个解决方案中,我们使用一个立即执行函数表达式(IIFE),即(function(item){...})(item)
,来创建闭包。这样做可以保存每个迭代的item
的值,并在异步函数中使用。在result.then()
回调函数中,我们给item.dis
属性赋值。最后,我们打印mylist
数组以查看结果。
请注意,由于异步函数的性质,我们无法保证console.log(mylist)
的输出顺序与异步函数的执行顺序一致。但是,mylist
中的dis
属性将会被正确地赋值。