我在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
。但它总是返回另一个对象(可能是response / ajax对象)。如何强制从这个内部函数返回data.section中的值?
提前谢谢?
答案 0 :(得分:3)
$.getJSON
是一个AJAX调用, A 代表异步,因此getSection
会在$.getJSON
从其回复之前返回服务器。基本上,除非您要将getSection
替换为$.ajax
并执行同步(即非异步)调用,否则无法让data.section
返回$.getJSON
;但是,同步调用是邪恶的,并且已被弃用,所以你不应该使用它们。
通常的解决方案是将回调传递给getSection
:
getSection = (url, callback) ->
req = $.getJSON url
req.success (data) ->
callback(data.section)
然后您将逻辑放在callback
中,而不是尝试使用getSection
返回值执行某些操作。
您的getSection
正在返回req
,因为这是req.success
返回的内容,而CoffeeScript函数会返回其最终值。