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)
}
}