I have written a promise.all
function as follow which is not returning my expected result.
if (Array.isArray(data)) {
return Promise.all(data.map((data) => {
hook.app.service('location')
.find({ query: { serviceLocationId:"100" } })
.then((result) => {
var startDept = result.data[0];
if (result.data.length > 0) {
data.problem.solutions.solution.routes.route.forEach((d) => {
d.stops.unshift({
serviceType: '',
orders: [],
travelTime:'',
travelDistance:'',
travelCost:'',
serviceTime: '',
serviceTimeCost:0,
tripNumber:0,
stopName : startDept.description,
arrivalTime:'',
departureTime : 36000.0,
locationType : startDept.locationType,
sequence : 0,
locationId : startDept.serviceLocationId,
lng : startDept.location.lng,
lat : startDept.location.lat
});
var endDept = d.stops.pop();
d.stops.push({
serviceType: '',
orders: [],
travelTime:endDept.travelTime,
travelDistance:endDept.travelDistance,
travelCost:endDept.travelCost,
serviceTime: '',
serviceTimeCost:0,
tripNumber:0,
stopName : startDept.description,
arrivalTime : endDept.arrivalTime,
departureTime:'',
locationType : startDept.locationType,
sequence : endDept.sequence,
locationId : endDept.locationId,
lng : startDept.location.lng,
lat : startDept.location.lat
});
});
hook.data = data;
combineArr = [];
return routes(hook).then((hook) => {
if ([hook.data].length > 0) {
combineArr.push(hook.data);
return combineArr;
} else {
next(new Error('routes response create failed'));
}
}).catch((err) => { return next(new Error(err.error)); });
} else {
next(new Error('no depo found'));
}
}).catch(err=>{ return next(new Error(err.error)); });
})).then((results) => {
console.log(results);
hook.result = results;
next();
});
}
The promise above returns [null, null]
. I'm not getting the expected result. Please help me to resolve this.
You're not returning anything from the map
callback, so the resulting array is an array of undefined
, not promises. You need to return the promise you're getting in the callback so the array is an array of promises.
Basically, you're doing this:
return Promise.all(myArray.map(entry => {
getAPromise(entry);
}));
...where you should be doing
return Promise.all(myArray.map(entry => {
return getAPromise(entry);
}));
....or
return Promise.all(myArray.map(entry => getAPromise(entry)));