У меня есть этот код:AngularJs сферы атрибутов и обещает
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();
});
Что я делаю неправильно?
UPDATE:
Я сейчас пытаюсь использовать только $ 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
Пожалуйста, добавьте ко всему соответствующему коду вопроса. Держитесь подальше от внешних ссылок, когда это не нужно. – Stewie
В рабочей версии вы ничего не делаете неправильно. В нерабочей версии вы назначаете обещание так, как если бы это было результатом, но обещания не работают так - они не волшебным образом преобразуются в результат, который они обещают доставить. Чтобы работать с результатом, когда он прибывает, необходимо вызвать метод '.then()' для обещания с подходящим обратным вызовом. –