Skip to content

Commit ab7cda6

Browse files
authored
Fix "promise chaining cycle" due to modifying promises in walking route (#275)
* Remove modifying directions * Do simply checks instead * Try moving try catch block
1 parent bb4ab65 commit ab7cda6

2 files changed

Lines changed: 31 additions & 46 deletions

File tree

src/utils/GraphhopperUtils.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ function getValidBusRoutes(busRoutes: Array<Object>, busRoutesToCheck: Array<Obj
200200
* @returns {Array<Object>}
201201
*/
202202
async function fetchRoutes(end: string, start: string, departureTimeDateNow: string,
203-
isArriveByQuery: boolean): Array<Object> {
203+
isArriveByQuery: boolean): Promise<Array<Object>> {
204204
let routes;
205205

206206
const sharedOptions = { method: 'GET', qsStringifyOptions: { arrayFormat: 'repeat' } };

src/utils/ParseRouteUtils.js

Lines changed: 30 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -460,15 +460,28 @@ function parseRoutes(
460460
originalDepartureTimeMs: number,
461461
isArriveByQuery: boolean,
462462
): Promise<Array<Object>> {
463-
return Promise.all(busRoutes.map(async (busRoute) => {
464-
try {
463+
try {
464+
return Promise.all(busRoutes.map(async (busRoute) => {
465465
// array containing legs of journey. e.g. walk, bus ride, walk
466466
const { legs } = busRoute;
467467
const numberOfLegs = legs.length;
468468

469469
// string 2018-02-21T17:27:00Z
470-
const { departureTime } = legs[0];
471-
const arriveTime = legs[numberOfLegs - 1].arrivalTime;
470+
let { departureTime } = legs[0];
471+
let arriveTime = legs[numberOfLegs - 1].arrivalTime;
472+
473+
// Readjust the walking start and end times by accounting for the buffer
474+
// times that were initially passed into Graphhopper to get routes
475+
if (busRoute.transfers === -1) {
476+
let startTimeMs = originalDepartureTimeMs;
477+
let endTimeMs = originalDepartureTimeMs + busRoute.time;
478+
if (isArriveByQuery) {
479+
startTimeMs = originalDepartureTimeMs - busRoute.time;
480+
endTimeMs = originalDepartureTimeMs;
481+
}
482+
departureTime = convertMillisecondsToISOString(startTimeMs);
483+
arriveTime = convertMillisecondsToISOString(endTimeMs);
484+
}
472485
const totalDuration = getDifferenceInMinutes(departureTime, arriveTime);
473486

474487
const startingLocationGeometry = legs[0].geometry;
@@ -483,8 +496,13 @@ function parseRoutes(
483496

484497
const directions = await Promise.all(legs.map(async (currLeg, j, legsArray) => {
485498
let { type } = currLeg;
486-
const startTime = currLeg.departureTime;
487-
const endTime = currLeg.arrivalTime;
499+
let startTime = currLeg.departureTime;
500+
let endTime = currLeg.arrivalTime;
501+
502+
if (busRoute.transfers === -1) {
503+
startTime = departureTime;
504+
endTime = arriveTime;
505+
}
488506

489507
if (type === 'pt') {
490508
type = DIRECTION_TYPE.DEPART;
@@ -662,39 +680,6 @@ function parseRoutes(
662680
stopName: destinationName,
663681
});
664682

665-
// Readjust the walking start and end times by accounting for the buffer
666-
// times that were initially passed into Graphhopper to get routes
667-
if (busRoute.transfers === -1) {
668-
let startTimeMs = originalDepartureTimeMs;
669-
let endTimeMs = originalDepartureTimeMs + busRoute.time;
670-
671-
if (isArriveByQuery) {
672-
startTimeMs = originalDepartureTimeMs - busRoute.time;
673-
endTimeMs = originalDepartureTimeMs;
674-
}
675-
676-
const walkDepartureTime = convertMillisecondsToISOString(startTimeMs);
677-
const walkArrivalTime = convertMillisecondsToISOString(endTimeMs);
678-
679-
directions[0].startTime = walkDepartureTime;
680-
directions[0].endTime = walkArrivalTime;
681-
682-
return {
683-
arrivalTime: walkArrivalTime,
684-
boundingBox,
685-
departureTime: walkDepartureTime,
686-
directions,
687-
endCoords,
688-
endName: destinationName,
689-
numberOfTransfers: busRoute.transfers,
690-
routeSummary,
691-
startCoords,
692-
startName: originName,
693-
totalDuration,
694-
travelDistance,
695-
};
696-
}
697-
698683
return {
699684
arrivalTime: arriveTime,
700685
boundingBox,
@@ -709,12 +694,12 @@ function parseRoutes(
709694
totalDuration,
710695
travelDistance,
711696
};
712-
} catch (error) {
713-
throw new Error(
714-
LogUtils.logErr(error, busRoutes.length, 'Parse final route failed'),
715-
);
716-
}
717-
}));
697+
}));
698+
} catch (error) {
699+
throw new Error(
700+
LogUtils.logErr(error, busRoutes.length, 'Parse final route failed'),
701+
);
702+
}
718703
}
719704

720705
export default {

0 commit comments

Comments
 (0)