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

响应,因为国家功能没有返回任何东西。我知道 results[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 回答
0

在 CoffeeScript 中,函数中的最后一个表达式被返回,就像在 Ruby 中一样。

在这里,您返回您的结果console.log

typeof console.log("123")
> "undefined"

我注意到有些人通过将一个单行@作为最后一行来避免这种情况,它只会返回this并避免一些尴尬的语法。

于 2012-06-09T16:23:56.130 回答