0
votes

comment consigner la valeur de retour de la promesse Sequelize

J'utilise Sequelize et je ne parviens pas à enregistrer la valeur d'une promesse. Je fais console.log ('helooo', timekeep); mais il imprime Promise {} . Je ne sais pas si je fais les choses correctement ou pas.

Voici mon code:

helooo
Promise {
_bitField: 0,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_promise0: undefined,
_receiver0: undefined }

J'obtiens comme ça quand je connecte la var. p>

const create = async function(req, res) {
    res.setHeader('Content-Type', 'application/json');
    let err, orders, wallet;
    let orders_info = req.body;  
    console.log('order_info : <<<<<< ' + JSON.stringify(orders_info));
    var timekeep =  Orders.findAndCountAll(
    {
        where: {
          cid : orders_info.cid,
        },      
        order: [
          ['id', 'DESC']
        ],
        limit: 1,
      }
   )
   .then(result => {
       console.log('hello', result);
       console.log(result.count);
       console.log(result.rows);
   });
   console.log('helooo',  timekeep);
}


0 commentaires

3 Réponses :


0
votes

timekeep est la valeur que vous renvoyez de la clause then , qui est Promise , car aucune valeur n'est renvoyée. < / p>

Le résultat que vous imprimez avec console.log ('bonjour', résultat); a la valeur que vous vouliez de la promesse.


2 commentaires

oui, mais je ne peux pas utiliser la fonction extérieure `` résultat ''


à droite, car il est défini uniquement dans le puis . si vous renvoyez le résultat et ajoutez wait avant Orders.findAndCountAll , vous aurez la valeur à timekeep



-1
votes

Il y a des problèmes mineurs avec le retour des données et le concept async await , veuillez consulter le code ci-dessous avec un commentaire:

var timekeep = await Orders.findAndCountAll({ // <----------- you need add await
    where: {
        cid: orders_info.cid,
    },
    order: [
        ['id', 'DESC']
    ],
    limit: 1,
})
.then(result => {
    console.log('hello', result);
    console.log(result.count);
    console.log(result.rows);
    return result; // <----------- also need to return the result from here
});
console.log('helooo', timekeep); // <----- Now check the console


0 commentaires

0
votes

Je vois que votre fonction create est déjà une fonction async . Donc, au lieu d'utiliser la syntaxe Promise, utilisez la syntaxe async / await. Maintenant, ce que vous essayez de faire est d'assigner l'expression de requête à la variable timekeep . Voici l'exemple de code,

const create = async function (req, res) {
    res.setHeader('Content-Type', 'application/json');
    let err, orders, wallet;
    let orders_info = req.body;
    console.log('order_info : <<<<<< ' + JSON.stringify(orders_info));
    // try resolving promise
    try {
        var timekeep = await Orders.findAndCountAll(
            {
                where: {
                    cid: orders_info.cid,
                },
                order: [
                    ['id', 'DESC']
                ],
                limit: 1,
            }
        );
        console.log("RESULT => ", timekeep)
    } catch (err) {
        // catch error here
        console.log(err)
    }
}


0 commentaires