Voici une partie de ma fonction qui doit être exécutée de manière asynchrone. pourquoi dans un endroit commenté il est indéfini, puisque la fonction renvoie une valeur. Et si mon code est incorrect, puis-je voir à quoi il devrait ressembler?
async function addAvailableFunds( recipientAvailableFunds, amountMoney, recipientId, transferCurrencyId, ) { const convertedAmountMoney = await currencyConversion( transferCurrencyId, recipientCurrencyId, amountMoney, ); console.log( 'convertedAmountMoney', convertedAmountMoney, ); // undefined async function currencyConversion( transferCurrencyId, recipientCurrencyId, amountMoney, ) { console.log('transferCurrencyId', transferCurrencyId); console.log('recipientCurrencyId', recipientCurrencyId); console.log('amountMoney', amountMoney); await Currency.findOne({ where: { id: recipientCurrencyId, }, }).then(async isRecipientCurrencyId => { if (isRecipientCurrencyId) { const mainCurrency = isRecipientCurrencyId.main_currency; const recipientCurrencyExchangeRate = isRecipientCurrencyId.currency_exchange_rate; console.log('mainCurrency', mainCurrency); console.log( 'recipientCurrencyExchangeRate', recipientCurrencyExchangeRate, ); await Currency.findOne({ where: { id: transferCurrencyId, }, }).then(isTransferCurrencyId => { if (isTransferCurrencyId) { const transferCurrencyExchangeRate = isTransferCurrencyId.currency_exchange_rate; console.log( 'transferCurrencyExchangeRate', transferCurrencyExchangeRate, ); if (mainCurrency) { const convertedAmountMoney = (amountMoney / transferCurrencyExchangeRate) * recipientCurrencyExchangeRate; console.log('convertedAmountMoney', convertedAmountMoney); return convertedAmountMoney; // return number } } }); } }); }
console.log renvoie un nombre donc je ne sais pas ce qui se passe. console.log renvoie un nombre donc je ne sais pas ce qui se passe.
3 Réponses :
Vous mélangez le modèle Promise puis
avec celui de async / await
.
Ce sont deux modèles de codage différents et incompatibles. wait
renvoie une valeur non-Promise (uniquement dans le contexte d'une fonction async
), mais then
ne renvoie jamais autre chose qu'une autre promesse. < / p>
Utilisez async / await
ou Promises, mais pas les deux dans la même logique.
À l'intérieur de votre currencyConversion
, vous mélangez deux approches pour gérer les fonctions qui renvoient des promesses.
Vous faites:
attendez Currency.findOne (... params ..). then (... params ..);
Bien que vous souhaitiez faire ce qui suit car vous utilisez la syntaxe async / await
:
let isRecipientCurrencyId = await Currency.findOne(...params..); ...rest of the code..
convertAmountMoney
n'a pas été défini car rien n'a été renvoyé dans currencyConversion
. Vous êtes retourné dans un .then
dans une autre promesse, mais currencyConversion
lui-même n'a rien retourné.
J'ai corrigé votre code ci-dessous afin de devenir complètement asynchrone / wait
, mais il y a trois autres
que vous devrez gérer vous-même, car à partir de maintenant vous n'avez pas précisé quoi faire à ce moment-là. J'ai ajouté trois avertissements à ce sujet.
async function addAvailableFunds( recipientAvailableFunds, amountMoney, recipientId, transferCurrencyId, ) { const convertedAmountMoney = await currencyConversion( transferCurrencyId, recipientCurrencyId, amountMoney, ); console.log( 'convertedAmountMoney', convertedAmountMoney, ); // undefined } async function currencyConversion( transferCurrencyId, recipientCurrencyId, amountMoney, ) { console.log('transferCurrencyId', transferCurrencyId); console.log('recipientCurrencyId', recipientCurrencyId); console.log('amountMoney', amountMoney); const isRecipientCurrencyId = await Currency.findOne({ where: { id: recipientCurrencyId, }, }) if (isRecipientCurrencyId) { const mainCurrency = isRecipientCurrencyId.main_currency; const recipientCurrencyExchangeRate = isRecipientCurrencyId.currency_exchange_rate; console.log('mainCurrency', mainCurrency); console.log( 'recipientCurrencyExchangeRate', recipientCurrencyExchangeRate, ); const isTransferCurrencyId = await Currency.findOne({ where: { id: transferCurrencyId, }, }) if (isTransferCurrencyId) { const transferCurrencyExchangeRate = isTransferCurrencyId.currency_exchange_rate; console.log( 'transferCurrencyExchangeRate', transferCurrencyExchangeRate, ); if (mainCurrency) { const convertedAmountMoney = (amountMoney / transferCurrencyExchangeRate) * recipientCurrencyExchangeRate; console.log('convertedAmountMoney', convertedAmountMoney); return convertedAmountMoney; // return number } console.warn('Will return undefined'); } console.warn('Will return undefined'); } console.warn('Will return undefined'); }
Puisque vous utilisez
await
, vous ne devez pas utiliserpuis
.Veuillez modifier votre exemple de code juste assez pour illustrer le problème que vous rencontrez. Merci.