sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo devolver valor de una Promesa

Intenta evitar anidar then y mantener plana la cadena de promesas. Además, puede unir los dos casos modelo en una sola pieza de código (DRY). Finalmente, usa map en lugar de forEach por lo que devuelve una serie de promesas, que luego puede enviar a 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); 
    });
}