新しい遅延オブジェクトをインスタンス化し、関数からそれ (またはその promise) を返す必要があります。.resolve
応答を取得したら、そのメソッドを呼び出します。
var getLocation = function() {
var deferred = new $.Deferred();
navigator.geolocation.getCurrentPosition(function( position ){
// Stuff with geolocation
deferred.resolve(position);
});
// return promise so that outside code cannot reject/resolve the deferred
return deferred.promise();
};
使用法:
getLocation().then(drawMarkerOnMap);
参考:jQuery.Deferred
補遺:
インターフェイスをシンプルに保つために、遅延オブジェクトと関数へのコールバックの両方のアプローチを使用しないことをお勧めします。しかし、下位互換性を維持する必要がある場合は、渡されたコールバックを遅延オブジェクトに登録するだけです。
var getLocation = function(callback) {
var deferred = new $.Deferred();
if ($.isFunction(callback)) {
deferred.then(callback);
}
navigator.geolocation.getCurrentPosition(function( position ){
// Stuff with geolocation
deferred.resolve(position);
});
// return promise so that outside code cannot reject/resolve the deferred
return deferred.promise();
};