2016-10-31 6 views
-1

GoogleのマップAPIを使用して2つのアドレスをジオコードする。返された結果を延期し、文字列アドレスの座標を取得したら$.when().then()メソッドを使用してロジックを実行します。問題は、たとえエラーがあっても、APIは常に解決された結果を返すことです。たとえば、要求のタイムアウトの代わりにインターネット接続がない場合、私はERRORと結果をnullとして取得します。無効なアドレスを入力すると、ステータスがZERO_RESULTSになり、結果は空の配列[]になります。適切な座標結果を得ることだけに興味があるので、他のすべての応答をジオコーディングエラーとして処理したいと思います。これは、わからない方法です。また、同じ問題のために、入力フィールドがジオコーディングの前に空であるかどうかを確認する必要があることがわかります。Googleマップapiでアドレスをゲーミングし、結果を遅らせる

私はちょうど非同期フローに精通し、いくつかのガイダンスが必要です。 jquery 1.9.2とGoogleマップAPIv3を使用しています。 (私はすべての条件をハードコードすることができますが、私はコーディングスキルを向上させ、より汎用的なものを作りたいと思っています)。

私のコードもここに示します。

function geocode(addString) { 
var deferred = $.Deferred(); 
var geocoder = new google.maps.Geocoder(); 
var request = { 
    address: addString 
}; 
geocoder.geocode(request, function(results, status) { 
    if (status === google.maps.GeocoderStatus.OK) { 
    deferred.resolve(results[0].geometry.location); 
    } 
    else { 
    // no idea what to do here 
    } 
}); 
return deferred; 
} 

function Options() { 
var origin = $("#origin-field").val(); 
var destination = $("#destination-field").val(); 
if (origin != "" && destination != ""){ 
    var originCoords = geocode(origin); 
    var destinationCoords = geocode(destination); 
    $.when(originCoords, destinationCoords) 
    .then(function(originCoordinates, destinationCoordinates) { 
    console.log(originCoordinates.lat() + ',' + originCoordinates.lng()); 
    console.log(destinationCoordinates.lat() + ',' + destinationCoordinates.lng()); 
}, function() { 
    toastMessage("Geo-coding error"); 
    }); 
} 
else { 
    toastMessage("Origin and/or Destination missing"); 
} 
} 
+1

可能性のあるステータスコードの一覧は、ドキュメントで確認できます。https://developers.google.com/maps/documentation/javascript/reference#GeocoderStatus – xomena

答えて

0

thisの例で私の問題を解決しました。私が言ったように、私はちょうど非同期フローを見始めたので、この単純な問題を解決する方法を知らなかった。 私がしたのは、elseブロック内の非OKステータスをすべてキャッチし、deferred.reject()メソッドに渡したことです。だから私のコードはこのようになった。

function geocode(addString) { 
var deferred = $.Deferred(); 
var geocoder = new google.maps.Geocoder(); 
    var request = { 
    address: addString 
    }; 
    geocoder.geocode(request, function(results, status) { 
    if (status === google.maps.GeocoderStatus.OK) { 
    deferred.resolve(results[0].geometry.location); 
    } 
    else { 
    deferred.reject(status); 
    } 
}); 
return deferred; 
} 

function Options() { 
var origin = $("#origin-field").val(); 
var destination = $("#destination-field").val(); 
var originCoords = geocode(origin); 
var destinationCoords = geocode(destination); 
$.when(originCoords, destinationCoords) 
.then(function(origin, destination) { 
    //some logic in case of success 
    }, function(status) { 
    toastMessage("Geo-coding error:" + status); 
}); 
} 
関連する問題