希望得到不延迟的对象,但阵列

问题描述:

我想通过代码twitter.tweets()得到的鸣叫,但AJAX方法类的Twitter仅返回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() 

谢谢你的好意。

+0

怀疑你想要那个!你不应该阻止代码执行等待异步调用回来 – AJcodez 2013-03-05 07:26:05

如果您使用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 

是最好的选择。

+0

你应该传递一些falsey值给回调作为第一个参数来表明没有错误,即'callback null,pass_some_data_if_you_want' – 2013-03-05 14:25:55

+0

@ nl_0你是对的。我不喜欢在JS中的一件事;-) – robkuz 2013-03-05 14:51:43