任何人都可以解释我如何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