0

我在咖啡脚本中有以下代码

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 中的值?

提前致谢?

4

1 回答 1

3

$.getJSON是一个 AJAX 调用,A代表异步,因此getSection将在$.getJSON从服务器返回其响应之前返回。基本上,除非您想替换并执行同步(即非异步)调用,否则您无法getSection返回;但是,同步调用是邪恶的并且正在被弃用,所以你不应该使用它们。data.section$.getJSON$.ajax

通常的解决方案是将回调传递给getSection

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

然后你把你的逻辑放进去,callback而不是试图用getSection返回值做一些事情。

getSection正在返回req,因为这就是req.success返回的内容,CoffeeScript 函数返回它们的最终值。

于 2012-08-03T07:26:07.967 回答