任何人都可以解釋我如何deffered
部分工作在這個代碼?延遲傳遞值如何?
(function() {
var getPosition = function (options) {
var deferred = $.Deferred();
navigator.geolocation.getCurrentPosition(
deferred.resolve,
deferred.reject,
options);
return deferred.promise();
};
var lookupCountry = function (position) {
var deferred = $.Deferred();
var latlng = new google.maps.LatLng(
position.coords.latitude,
position.coords.longitude);
var geoCoder = new google.maps.Geocoder();
geoCoder.geocode({ location: latlng }, deferred.resolve);
return deferred.promise();
};
var displayResults = function (results, status) {
$("body").append("<div>").text(results[0].formatted_address);
};
$(function() {
$.when(getPosition())
.pipe(lookupCountry)
.then(displayResults);
});
}());
我對上面的代碼是如何工作的幾個問題..
$(function() {
$.when(getPosition())
.pipe(lookupCountry)
.then(displayResults);
});
- 如何不經過
options
上面的代碼仍然可以工作?如何將position
傳遞給lookupCountry()方法? - 如果在
getPosition
函數中deferred.reject
被觸發將會發生什麼?
什麼你問的是真的,爲什麼當一個函數被引用的參數自動傳遞,而不是所謂 – adeneo 2014-12-27 14:15:42
@adeneo這裏一個有趣的事情做的是,它似乎「解決「和」拒絕「回調內在綁定到每個延遲實例。我不知道。或者,也許內臟不會依賴'this'。 – Pointy 2014-12-27 14:23:20
@Pointy - 是的,它們綁定到每個實例,並且可以根據需要創建多個實例。過去你會稱之爲'var def = new $ .Deferred()',但現在它在內部執行,就像'$()'檢查它是否是一個instanceof本身並且自動返回'new'關鍵字。當你調用它時,你不必實際寫出「新」,這是一個非常好的做法。 – adeneo 2014-12-27 14:26:35