方法回调返回未定义[CoffeeScript]

时间:2013-11-08 22:40:51

标签: coffeescript meteor

我在服务器上使用HTTP方法调用一个简单的google api。看来我得到了一个json对象,但客户端上的回调似乎返回了一个未定义的对象。

我的猜测是某种程度上结果是没有及时回调。有点困惑。

完整代码:

if Meteor.isClient
    Meteor.startup () ->
        console.log "Client Started."

    Meteor.call("getGeocode", 94582, (error, result) ->
        console.log "GeoCode returned to client, #{result}."
        Session.set("latitude", result))

    Template.results.latitude = () ->
        Session.get("latitude")

    Template.results.longitude = () ->
        "longitude"

if Meteor.isServer
    Meteor.startup () ->
        console.log "Server Started"

    Meteor.methods
        "getGeocode": (zipCode) ->
            result = HTTP.call("GET", "http://maps.googleapis.com/maps/api/geocode/json?address=#{zipCode}&sensor=false")
            console.log "Geocode called, returning #{result}."

1 个答案:

答案 0 :(得分:1)

您的getGeocode方法返回undefined因为CoffeeScript会自动返回函数中的结果最后一个语句,在本例中为console.log

我不认为result真的是你想要的。我建议您在util部分的开头添加isServer,如下所示:

if Meteor.isServer
  util = Npm.require 'util'

现在,您可以致电console.log util.inspect result, {depth: null}查看其内容。我想你可能真正希望返回的是result.data.results[0]。您的代码可能类似于:

if Meteor.isClient
  Meteor.startup () ->
    console.log "Client Started."

  Meteor.call("getGeocode", 94582, (error, result) ->
    Session.set("latitude", result.geometry.location.lat))

  Template.results.latitude = () ->
    Session.get("latitude")

  Template.results.longitude = () ->
    "longitude"

if Meteor.isServer
  util = Npm.require 'util'

  Meteor.startup () ->
    console.log "Server Started"

  Meteor.methods
    "getGeocode": (zipCode) ->
      result = HTTP.call("GET", "http://maps.googleapis.com/maps/api/geocode/json?address=#{zipCode}&sensor=false")
      geoData = result.data.results[0]
      console.log util.inspect geoData, {depth: null}
      geoData