我想通过代码twitter.tweets()获取推文,但是类Twitter的ajax方法仅返回Deferred对象,例如此问题的底部所示。

class Twitter
  tweets = []

  getTweets: ->
    tweets_array = []
    $.getJSON('http://search.twitter.com/search.json?callback=?&rpp=100&q=%40weed_7777')
    .done((data) =>
      $.each data.results, (i, item) ->
        tweets_array.push item.text
      @tweets = tweets_array
    )

twitter = new Twitter

###
Present Code
###
twitter.getTweets()
.done ->
  console.log twitter.tweets

###
Ideal Code ... very simple !
###
console.log twitter.tweets()




谢谢你的好心。

最佳答案

如果您使用Javascript,则应该高度了解您正在异步/事件环境中工作的事实。因此,最终您将不得不习惯这一点。当然,有一些策略可以使生活更轻松,例如通过使用异步库(https://github.com/caolan/async

async.series [
    (callback) =>
        $.getJSON('http://search.twitter.com/search').done (data) =>
            @tweets = (item for item in data)
            callback(null, pass_some_data_if_you_want)
    ,
    (callback) =>
        $.getJSON('http://search.twitter.com/some_other_search').done (data) =>
            do_what_ever_you_want_and_need()
            callback(null, pass_some_data_if_you_want)
    ],
    (error, result) => handle_error_case(error)


显然,仅当您要依次执行多个操作时,这才有意义。
如果您只有一个。比你的代码

twitter.getTweets().done -> console.log twitter.tweets


是最好的方法。

09-15 13:47