我有這樣的代碼:AngularJs scope屬性,並承諾
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
在工作版本中你沒有做錯什麼。在非工作版本中,您將承諾視爲結果分配,但承諾不會如此 - 它們不會奇蹟般地變形爲承諾交付的結果。爲了在結果到達時處理結果,需要使用合適的回調調用promise的'.then()'方法。 –