PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So geben Sie den Wert eines Versprechens zurück

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); 
    });
}