2012-08-03 83 views
0

我在CoffeeScript的的CoffeeScript总是返回响应对象

getSection = (url) -> 
    req = $.getJSON url 
    return req.success (data) -> 
    data.section 

或以下代码,

getSection = (url) -> 
    req = $.getJSON url 
    req.success (data) -> 
    data.section 

我打算返回data.section为函数getSection。但它总是返回另一个对象(可能是响应/ ajax对象)。我如何强制从这个内部函数返回data.section中的值?

在此先感谢?

+0

你想从getSection返回,还是从成功回调? – Thilo 2012-08-03 06:52:45

回答

3

$.getJSON是一个AJAX调用和一个代表异步所以getSection将返回$.getJSON获取其响应从服务器返回之前。基本上,你不能得到getSection返回data.section,除非你想用$.ajax替换$.getJSON并做一个同步(即非异步)的调用;然而,同步调用是邪恶的,并被弃用,所以你不应该使用它们。

通常的解决办法是将回调传递给getSection

getSection = (url, callback) -> 
    req = $.getJSON url 
    req.success (data) -> 
    callback(data.section) 

,然后你把你的逻辑callback而不是试图做的getSection返回值的东西。

您的getSection正在返回req,因为req.success返回并且CoffeeScript函数返回它们的最终值。

+0

感谢您的回应!我真的忘了在getJSON完成之前getSection会返回!正如我现在知道的原因,我会做一些工作。 – HungryCoder 2012-08-03 08:07:06

+0

是的,我已经编写了一个函数,可以在数据从getJSON中加载并从成功回调中调用该函数之后完成工作,非常类似于您展示的方式:)。谢谢 – HungryCoder 2012-08-03 15:06:02

相关问题