2017-02-03 3 views
3

나는 web3 API를 사용하여 ethereum 계정의 잔액 값을 반환하려고하는데, $ scope에서 그 값을 얻고 싶습니다. 내 HTML. 불행히도 나는 항상 가치를 얻지 못한다. 나는 web3이 비동기일지도 모른다고 생각하지만 의심 스럽다.

app.controller('mainController', function ($scope) { 
    $scope.showBalance = function(){ 
     web3.eth.getBalance("0xCc26fda641929192B2Fe96BBc37DB5B451Cb9A8c", 
      function(err, res){ 
       $scope.balance = res.c[0] 
       console.log("This is inside:" + $scope.balance); 
      }); 

     console.log("This is outside:" + $scope.balance); 
    }; 

    angular.element(document).ready(function() { 
     $scope.showBalance(); 
    }); 
}); 

기본적을 console.log ("이것은 내부에") 작동하고 난 올바른 값을받을 수 있나요 : 여기 내 코드입니다. 하지만 console.log ("This is outside")는 정의되지 않은 값을 얻습니다.

+1

web3.eth.getBalance가 무엇인지 모르겠지만 그 약속을 지킵니다. 그렇다면 약속이 해결 될 때까지 콜백 함수의 코드가 실행되지 않습니다. 한편, 다른 코드는 계속 실행됩니다. 실행 중에 코드를 단계별로 실행하면이 사실을 알 수 있습니다. – jbrown

답변

2

불행히도 나는 항상 값이 정의되지 않습니다. 나는 웹 3은 비동기일지도 모른다고 생각하지만 실제로는 이 아닙니다.

당신은 짐작했습니다. 여기

:

web3.eth.getBalance("0xCc26fda641929192B2Fe96BBc37DB5B451Cb9A8c", 
     function(err, res){ 
      $scope.balance = res.c[0] 
      console.log("This is inside:" + $scope.balance); 
     }); 

    console.log("This is outside:" + $scope.balance); 

함수 (ERR, 고해상도)에 getBalance() 함수가 작업을 완료했을 때에 실행할 콜백 함수이다.
콜백 함수 선언이 차단되지 않습니다. 호출 된 함수가 태스크를 완료하고 호출자에게 태스크 결과를 알리는 콜백 함수를 호출 할 수있는 약속을 리턴 할 때만 실행됩니다. getBlance() 함수가 호출 될 때
그래서, 다음 실행되는 코드는 다음과 같습니다

console.log("This is outside:" + $scope.balance);. 

그러나이 시간에

이, 콜백 함수가 아직 호출되지 않았습니다.
콜백 함수가 호출 된 경우에만 $scope.balance = res.c[0]이 실행됩니다.

결론 :

당신은 console.log("This is outside:" + $scope.balance);을 제거해야합니다.