[英]Async Promises Inside For Loop
如果内部for循环为true,我想每次获取一条路由。
它显示if HIT ${j}
如预期的那样if HIT ${j}
,然后getSinglePart(partPath)
,按预期显示log 1
,然后应该在log 1
之后立即将res
返回到getSinglePart(partPath).then(res)
。
但是getSinglePart().then((res))
在for循环结束后立即显示所有路由!
为什么即使它返回了承诺? 以及如何解决?
提前致谢 :)
function getSinglePart(partPath){
return new Promise((resolve, reject) => {
console.log('log 1');
let tempDirectionsService = new google.maps.DirectionsService;
let tempElevationService = new google.maps.ElevationService;
let tempDirectionsRenderer = new google.maps.DirectionsRenderer({draggable: true, map: store.getState().map});
tempDirectionsService.route({
origin: partPath[0],
//waypoints: waypointsArray,
destination: partPath[partPath.length-1],
travelMode: 'WALKING',
avoidTolls: true
}, (res, status) => {
resolve(res);
});
});}
function getParts(response){
let distances = [];
let legs = response.routes[0].legs;
for(let i=0; i<legs.length; i++){
let steps = legs[i].steps;
let distanceCounter = 0;
let partsCounter = 0;
let startNextIndexes = [0];
for(let j=0; j<steps.length; j++){
distances.push(steps[j].distance.value);
distanceCounter += steps[j].distance.value;
if(distanceCounter > 100000 || j === steps.length-1){
startNextIndexes.push(j+1);
let partPath = [];
distanceCounter = 0;
console.log(`if HIT ${j}`);
for(let k=startNextIndexes[partsCounter]; k<=j; k++){
for(let l=0; l<steps[k].path.length; l++){
partPath.push(steps[k].path[l]);
}
}
getSinglePart(partPath).then((res) => {
console.log('then');
console.log(res);
});
}
}
}}
所描述的behaivor似乎是正确的,因为您实际上是在计划一堆“ tempDirectionsService.route”函数以进行异步处理,然后退出循环,然后等待“ tempDirectionsService.route”完成(每个“ then”在每个“ tempDirectionsService.route”完成时打印(没有特定顺序,可以在循环期间也可以在循环之后)。 如果您的目标是等待当前计划的“ tempDirectionsService.route”完成,然后再进行循环的下一个迭代,则必须相应地重写循环。 例如:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.