gpt4 book ai didi

javascript - 需要帮助创建带回调的异步函数

转载 作者:行者123 更新时间:2023-12-03 09:29:22 25 4
gpt4 key购买 nike

我有一个 JSON 对象,其中包含一些条目(约会),每个条目都有一个“位置 id”。然后我循环遍历这些条目,并通过 socketIO 向我的 NodeJS 服务器发出请求,以从具有位置 id 的文档中获取数据。

最后,我需要一个包含纬度/经度数据的数组来在 map 上创建一些标记。

这是代码:

//controller for showing map
.controller('MapCtrl', function($scope, socket){

socket.emit('getApp', staticUserid);

socket.on('getApps', function (appdata) {
var locArr = [];
for (var i = 0; i < appdata.length; i++) {
if (appdata[i].locationid != '') {
locArr.push(appdata[i].locationid);
}
}
var LatLngArr = [];
for (var j = 0; j < locArr.length; j++) {
socket.emit('getLocation', locArr[j]);
socket.on('getLoc', function (locData) {
console.log('received lat/lng: ' + locData.lat + '/' + locData.lng);
if (!LatLngArr[j]) LatLngArr[j] = []
LatLngArr[j][0] = locData.lat;
LatLngArr[j][1] = locData.lng;
});
}
//console.log('test:'+LatLngArr[0][0]);
});

var newMarkers = [[52.549678, 13.3879516],[52.5442992, 13.352809],[52.5186283,13.3761181]]; // this should be the generated array
var newCenter = [52.549678, 13.3879516];
createMap(newCenter,newMarkers);

})

问题是,var LatLngArr 没有定义在...

socket.on('getLoc', function (locData)

如果有人能帮助我,那就太好了:-)

非常感谢!

最佳答案

如果你可以使用 Promise

.controller('MapCtrl', function($scope, socket){

socket.emit('getApp', staticUserid);

socket.on('getApps', function (appdata) {
var locArr = [];
for (var i = 0; i < appdata.length; i++) {
if (appdata[i].locationid != '') {
locArr.push(appdata[i].locationid);
}
}
var LatLngArr = [];
var promises = [];
for (var j = 0; j < locArr.length; j++) {
promises[j] = (function(captured_j) {
return new Promise(function(resolve, reject) {
socket.emit('getLocation', locArr[captured_j]);
socket.on('getLoc', function (locData) {
console.log('received lat/lng: ' + locData.lat + '/' + locData.lng);
if (!LatLngArr[captured_j]) LatLngArr[captured_j] = []
LatLngArr[captured_j][0] = locData.lat;
LatLngArr[captured_j][1] = locData.lng;
resolve({index: captured_j, result: LatLngArr[captured_j]});
});
});
}(j));
}
Promise.all(promises).then(function(arr) {
// ******************************************
// ******************************************
// arr is an array of {index: #, result [lat, lng]} - but you can also use LatLngArr
// ******************************************
// ******************************************
});
});
var newMarkers = [[52.549678, 13.3879516],[52.5442992, 13.352809],[52.5186283,13.3761181]]; // this should be the generated array
var newCenter = [52.549678, 13.3879516];
createMap(newCenter,newMarkers);
})

关于javascript - 需要帮助创建带回调的异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31565971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com