リスナーで関数を呼び出す angularJS に $watchCollection がgetBalance(addr)
あります。
$scope.$watchCollection('settings',
function() {
for (i = 0; i < $scope.settings['accounts'].length; i++) {
var bal = $scope.getBalance($scope.settings['accounts'][i]);
console.log(bal);
}
}
);
関数 getBalance は次のように定義されます。
$scope.getBalance = function(addr) {
var balance;
if ($scope.settings.contract !== null) {
$scope.settings.contract.deployed().then(function(deployed) {
return deployed.balanceOf(addr);
}).then(function(res) {
balance = res.toNumber();
console.log(balance);
return balance;
}).catch(function(err) {
console.log(err.message);
});
}
return balance;
};
問題はthen
、 ではbalance
変数が正しく出力されますが、$watchCollection では戻り値がundefined
.
問題は、JS が結果を待たずに実行を続けるため、変数が次のように読み取られるためです。undefined
ただし、準備ができたら結果を取得して に追加するには、これら 2 つのコード スニペットを変更する必要があります$scope.balance
。