comment puis-je empêcher les appels de fonction web3 d’imprimer la promesse; Je veux seulement que la valeur réelle soit imprimée

user2061575

comment puis-je empêcher les appels de fonction web3 d’imprimer la promesse; Je veux seulement que la valeur réelle soit imprimée


J’utilise node.js pour exécuter un script JavaScript simple qui teste l’accès à la blockchain de rinkeby à l’aide d’un point de terminaison infura. plus précisément, il vérifie le solde de mon adresse.

Dans le code si j’invoque:

 console . log ( web3 . eth . getBalance ( address )); 

il ne renvoie que la promesse ie

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

Si en revanche j’appelle:

 console . log ( web3 . eth . getBalance ( address ,   function   ( error ,  result )   {   })); 

il retourne à la fois la promesse et le solde d’adresse ie.

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

Je ne comprends pas vraiment pourquoi cela imprime la promesse. Je veux simplement qu’il renvoie la valeur uniquement, c’est-à-dire 18750000000000000000

Comment puis-je y parvenir et ai-je vraiment besoin de spécifier la function (error, result) { } paramètre facultatif à tous les appels de fonction web3 juste pour qu’il me renvoie les données dont j’ai besoin?

Merci

Réponses


 Tudor Constantin

essayez avec quelque chose comme:

 const  get_eth_balance =   async   ( web3 ,  account )   =>   { 

   const  balance =   await  web3 . eth . getBalance ( account ); 

   return  balance ; 
 }; get_eth_balance ( web3 ,  account ); 

Les principaux mots clés ici étant l’ async / wait qui rendent le code beaucoup plus sain qu’il ne le ferait en utilisant des rappels.

Tudor Constantin

si cela vous a aidé, veuillez voter et accepter ma réponse 🙂

user2061575

tout d’abord, merci pour votre réponse rapide et informative: votre code ne sert qu’à imprimer: « obtenir le solde du compte: [promesse d’objet] » et non la valeur réelle que j’attends. Suis-je en train de manquer autre chose ici? En outre, l’approche async / wait signifie-t-elle que je peux me passer de la syntaxe Promise.then () beaucoup plus verbeuse et difficile à lire?

Tudor Constantin

oui, vous pouvez également l’utiliser comme web3.eth.getBalance(account).then( balance => {console.log(balance)} )

user2061575

super – ça marche un régal. Merci


 smirzo

Si je me souviens bien, la version Web3 actuelle (v1.0) ne prend pas en charge les opérations synchrones. Si vous souhaitez des fonctions synchrones (sans promesses ni asynchronisation / attente), vous pouvez installer la version précédente en procédant comme suit:

npm install [email protected]

 const   Web3   =  require ( 'web3' ) 
 const  web3 =   new   Web3 ( new   Web3 . providers . HttpProvider ( 'https://rinkeby.infura.io' )) 
 const  address =   '0x966e42aA4E7368818517a93656362C30d8E4d5fE' 
 const  balance =  web3 . eth . getBalance ( address ) console . log ( balance . toNumber ()) 

 

#de, #la, appels, comment, d’imprimer, Empêcher, fonction, imprimée, je, Les, promesse, Puis-je, que, réelle, seulement, soit, valeur, veux, web3

 

yahoo

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *