希望得到不延迟的对象,但阵列
我想通过代码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()
谢谢你的好意。
如果您使用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
是最好的选择。
你应该传递一些falsey值给回调作为第一个参数来表明没有错误,即'callback null,pass_some_data_if_you_want' – 2013-03-05 14:25:55
@ nl_0你是对的。我不喜欢在JS中的一件事;-) – robkuz 2013-03-05 14:51:43
怀疑你想要那个!你不应该阻止代码执行等待异步调用回来 – AJcodez 2013-03-05 07:26:05