then
नेस्टिंग से बचने की कोशिश करें , और वादा श्रृंखला को सपाट रखें। इसके अलावा, आप दो मॉडल मामलों को एक कोड ऑफ़ कोड (DRY) में शामिल कर सकते हैं। अंत में, map
का उपयोग करें forEach
. के बजाय इसलिए आप वादों की एक श्रृंखला लौटाते हैं, जिसे आप Promise.all
. पर फीड कर सकते हैं :
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);
});
}