Versuchen Sie zu vermeiden, then
zu verschachteln , und halten Sie die Versprechenskette flach. Darüber hinaus können Sie die beiden Modellfälle zu einem Codestück (DRY) zusammenfügen. Verwenden Sie schließlich map
statt forEach
Sie geben also ein Array von Promises zurück, die Sie dann an Promise.all
füttern können :
router.post('/devices', function (req, res, next) {
var promises = loadash.map(req.body.devices, function (device) {
return Device.forge()
.where({deviceid: device.deviceid})
.fetch({columns: ['id', 'mode']})
.then(function (fetchedDevice) {
var model = [Model_1, Model_2][fetchedDevice.get('mode')-1];
if (model) {
return model.forge()
.where({device_id: fetchedDevice.get('id')})
.orderBy('epoch_time', 'DESC')
.fetch();
}
}).catch(function (err) {
console.log(err);
});
});
Promise.all(promises).then(function (currentData) {
currentData = currentData.filter(model => model) // exclude undefined
.map(model => model.toJSON());
console.log('Final: ' +currentData);
});
}