0

私はコードを持っています:

  country: (origin) ->
    @geocoder = new google.maps.Geocoder
    @geocoder.geocode(
        'latLng': origin,
        (results, status) => 
            if status is google.maps.GeocoderStatus.OK
              return results[6]
            else alert("Geocode was not successful for the following reason: " + status);
    )

backbone.js で次のように呼び出しています。

test = @country(origin)
console.log(test)

テストとして、console.log を使用しています。しかし、私は得ています:

undefined

国関数が何も返さないためです。結果[6]にデータが含まれていることはわかっています。そこでconolse.logを実行すると返されるからです。

呼び出されたときに国の関数が結果[6]を返すようにするにはどうすればよいですか?

4

2 に答える 2

1

そのAPI自体はわかりませんが、非同期のように見えます。つまり、関数に値を返すことはできません。代わりに、結果が利用可能になったときに結果を処理する継続関数を渡す必要があります。

country: (origin, handleResult) ->
    @geocoder = new google.maps.Geocoder
    @geocoder.geocode(
        'latLng': origin,
        (results, status) => 
            if status is google.maps.GeocoderStatus.OK
              handleResult(results[6])
            else alert("Geocode was not successful for the following reason: " + status);
    )

countryこれを使用するには、結果をどう処理するかを知っている関数を作成し、それを関数に渡します。

obj.country origin, (result) ->
    alert 'Got #{result} from Google'
于 2012-06-09T16:16:25.023 に答える