PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment renvoyer la valeur d'une promesse

Essayez d'éviter d'imbriquer then , et gardez la chaîne de promesse plate. De plus, vous pouvez joindre les deux cas modèles en un seul morceau de code (DRY). Enfin, utilisez map au lieu de forEach vous renvoyez donc un tableau de promesses, que vous pouvez ensuite alimenter dans 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); 
    });
}