循环遍历列表存储该列表对应下的用户当前地理坐标
- 当前 Bug 的表现(可附上截图)
通过for循环遍历列表信息,进行对列表信息中的定位信息进行更新为当前定位信息,报错undefined,初步认识到可能是for循环遍历较快,而获取定位信息较慢,造成这种情况,就想知道有没有可以让for循环中的每一轮执行时暂停一会再执行的方法,可能或提出将for循环放在wx.getLocation()方法之内,但是我的最终目的是通过for循环进行地址解析,所以for循环要放在外侧。
- 预期表现
列表中的各项定位信息更新为当前定位信息
- 复现路径
- 提供一个最简复现 Demo
getPositions: function (){ var list=[]; for ( var i= 0 ;i< 3 ;i++){ var item = { id: i, name: 'pp' +i, position: { lat: 0 , lng: 0 } }; list.push(item); } console.log(list); for ( var i= 0 ;i<list.length;i++){ wx.getLocation({ success: function (res) { list[i].position.lat=res.latitude; list[i].position.lng=res.longitude; }, }) } console.log(list); }, |
2 回复
请使用闭包或者递归。
闭包:
onLoad() { var list = []; for ( var i = 0; i < 3; i++) { var item = { id: i, name: 'pp' + i, position: { lat: 0, lng: 0 } }; list.push(item); } for ( var i = 0; i < list.length; i++) { let j = i wx.getLocation({ success: function (res) { list[j].position.lat = res.latitude; list[j].position.lng = res.longitude; console.log(list); }, }) } } |
递归:
onLoad() { this .list = []; for ( var i = 0; i < 3; i++) { var item = { id: i, name: 'pp' + i, position: { lat: 0, lng: 0 } }; this .list.push(item); } this .pos = 0 this .digest() }, digest(){ wx.getLocation({ success: (res)=> { console.log( this .pos) this .list[ this .pos].position.lat = res.latitude; this .list[ this .pos].position.lng = res.longitude; console.log( this .list); if (++ this .pos < this .list.length){ this .digest() } }, }) } |