2013-03-05 57 views
0

我想通過代碼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

回答

2

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