我有ng-change="myFunc()" ng-model="themodel"
的字段
和$watch(themodel, function = {longAsyncFunc();})
我想只在longAsyncFunc返回时触发myFunc()。 我虽然做了类似的事情:
$watch(themodel, function = {longAsyncFunc(); $scope.ready = true;})
myFunc = function() {
while(!$scope.ready) {
;
}
$scope.ready = false;
//do stuff
}
但它最终会出现无限循环,手表永远不会被触发。
我知道我应该使用promise但是longAsyncFunc已经捕获了异步调用的.then(),我宁愿不修改它。
答案 0 :(得分:0)
你可以使用这样的回调:
$scope.longAsyncFunc = function(callback) {
//do what ever you want
callback();
}
$scope.$watch(themodel, function {
longAsyncFunc(myFunc);
$scope.ready = true;
}
答案 1 :(得分:0)
我不明白你为什么要使用$watch
& ng-change
在一起,我建议您使用ng-change指令而不是$watch
,longAsyncFunc
将返回promise对象。
<强> HTML 强>
ng-change="changeFunction()"
<强>控制器强>
$scope.changeFunction = function() {
longAsyncFunc().then(function(data){
//this will ensure the async load completed.
myFunction();
})
}