Cobalah untuk menghindari bersarang then
, dan jaga agar rantai janji tetap datar. Selanjutnya, Anda dapat menggabungkan dua kasus model menjadi satu bagian kode (KERING). Terakhir, gunakan map
alih-alih forEach
jadi Anda mengembalikan serangkaian janji, yang kemudian dapat Anda masukkan ke 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);
});
}