PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como devolver o valor de uma promessa


Tente evitar aninhar then , e mantenha a cadeia de promessas plana. Além disso, você pode juntar os dois casos de modelo em um pedaço de código (DRY). Por fim, use map em vez de forEach então você retorna uma matriz de promessas, que você pode alimentar em 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); 
    });
}