2017-12-01 34 views
-2

ethereum과 web3js를 배우기 시작했고 Web3js의 일부 기능이 비동기임을 알게되었습니다. 내가 원하는 것은 지갑의 계정 잔고를 얻고 그 데이터를 다른 용도로 사용하는 것입니다. 내"Promise"객체에서 값을 얻는 방법

function getAccountBalance2(address){ 
      var wei, balance 
      //address = document.getElementById("addy").value 
      return new Promise(function(resolve, reject){ 
       web3.eth.getBalance(address, function(error, wei){ 
        if(error){ 
         console.log("Error with address"); 
        }else{ 
         var balance = web3.fromWei(wei, "ether"); 
         var bal = resolve(balance); 
         //console.log(bal); 
         console.log(balance.toNumber()); 
         return balance.toNumber(); 
        } 
       }); 
      }); 
     } 

아래 코드와 내가

function interTransfer(){ 
      var from, to, amount, fromWallet, toWallet 
      from = document.getElementById("from").value 
      to = document.getElementById("to").value 
      amount = document.getElementById("amount").value 

      if(isWalletValid(from) && isWalletValid(to)){ 
       fromWallet = getAccountBalance2(from); 
       toWallet = getAccountBalance2(to); 
      }else{ 
       console.log("Something is wrong") 
      } 

      console.log(fromWallet + " "+ toWallet) 
     } 

출력 다음은이 함수에서 반환 된 값을 사용하려고 내가 실제 값과 사용을 얻는 방법

it gives a promise object

그것에서 interTransfer() 기능

+3

[비동기 호출의 응답을 어떻게 반환합니까?] (https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous- 전화) – Igor

답변

0

너 약속 된 가치를 기다릴 필요가있다. 당신은 다른 then 호출하여이 작업을 수행 할 수 있습니다 - 이전이 완료 될 때까지 기다릴 필요 하나 개의 요청 피하기 위해 - Promise.all :

function interTransfer(){ 
    // ... 
    promise = Promise.all([getAccountBalance2(from), getAccountBalance2(to)]) 
     .then(function ([fromWallet, toWallet]) { 
      console.log('from wallet', fromWallet, 'to wallet', toWallet); 
     }); 
    // ... 
    return promise; // the caller will also need to await this if it needs the values 
} 

또는를 async 기능과 await 키워드 :

getBalance 콜백의 return은 쓸모가 없으므로 rejectif(error)의 경우에 호출해야합니다.

+0

그것은 약속의'.then'을'async' /'await'을 사용하는 것에 대해서 알지 못하는 것에서 큰 도약입니다 : p –