10 秒のタイムアウトで HTML Geolocation を実装しました。ただし、「失敗」コールバックは 10 秒後にトリガーされません。(ユーザーが自分の位置を共有する許可を拒否した場合、「失敗」コールバックが呼び出されます)。
コードの何が問題になっていますか?
これが私のコードです:
function getLocation(){
var deferred = $q.defer();
var success = function(position){
deferred.resolve(position);
};
var failure = function(error){
deferred.reject(error);
};
var options = {timeout: 10000};
if ($window.navigator && $window.navigator.geolocation) {
$window.navigator.geolocation.getCurrentPosition(success, failure, options);
}
else {
deferred.reject("Unsupported browser");
}
return deferred.promise;
}
解決した
問題は、ユーザーが自分の場所を共有することに同意した場合にのみ、地理位置情報自体のタイムアウトが開始されることです。ユーザーが同意せず、コールバックがトリガーされない状況に対処したかったのです。解決策は、$timeout を使用して別のタイムアウトを作成することです。