我有这段代码:
var geocode = function(value) {
var request;
.....
var dResult = Q.defer();
geocoder.geocode(request, function (results) {
dResult.resolve(results);
});
return dResult.promise;
};
var cancelWatch;
$scope.$watch('value', function (value) {
$timeout.cancel(update);
update = $timeout(function () {
$scope.geocodedResult = geocode(value);
}, 300);
});
第15行中的$ scope.geocodedResult是一个承诺,它迟早会成为结果值,并且范围应该刷新。不幸的是,这不会发生。 如果我这样做,代码就可以了
geocode(value).then(function(result) {
$scope.geocodedResult = result;
$scope.$digest();
});
我做错了什么?
更新:
我现在只想使用$ q,但我无法让它工作:
this.getCurrentPosition = function () {
var dCurrentPosition = $q.defer();
if (currentPosition) {
dCurrentPosition.resolve(currentPosition);
} else {
navigator.geolocation.getCurrentPosition(function (cp) {
currentPosition = cp;
dCurrentPosition.resolve(currentPosition);
});
}
return dCurrentPosition.promise;
};
this.getCurrentLoc = function () {
return self.getCurrentPosition().then(function (currentPosition) {
return [currentPosition.coords.longitude, currentPosition.coords.latitude];
});
};
中的断点
return [currentPosition.coords.longitude, currentPosition.coords.latitude];
在Q
工作正常时永远不会被触发答案 0 :(得分:0)
如果你使用Angular的$ q而不是Q,它应该可以工作:
var dResult = $q.defer();
$ q promises由角度模板引擎识别,这意味着在模板中,您可以将附加到范围的promise视为结果值。 - $q docs
因此可以将$scope.geocodedResult
设置为$ q promise,当解析promise时,scope属性将自动更新。