sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man returnerar värde från ett löfte

Försök att undvika att kapsla then , och håll löfteskedjan platt. Dessutom kan du sammanfoga de två modellväskorna till ett stycke kod (DRY). Använd slutligen map istället för forEach så du returnerar en mängd löften, som du sedan kan mata till 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); 
    });
}


  1. Inte en giltig månad på ett INSERT-utdrag

  2. Korrekt hantering av databasresurser:markör och anslutning

  3. Ställa in och konfigurera alltid-på-tillgänglighetsgrupp i SQL Server

  4. SQL - ordning efter listordning