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); }
3 Réponses :
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.
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
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
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) } }