我在 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
但是,我如何更改这两个代码片段才能在准备好时获得结果并将其附加到$scope.balance
.