У меня есть этот код:
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
.then()
с подходящим обратным вызовом. - person Beetroot-Beetroot   schedule 03.07.2013