2012-07-04 71 views
2

我想找回我从Twitter去年的鸣叫与https://github.com/jdub/node-twitterTwitter的API和节点

我要声明一个变量,改变函数内的变量,那么函数外再次使用它。这可能吗?

我已经验证,可以看到我的最后的鸣叫,如果我做的:

var tweet; 

twit.get('http://api.twitter.com/1/statuses/user_timeline.json', function(data) { 
    tweet = data[0].text; 
    console.log(tweet); 
}); 

但我想我的代码中分离出来,并做到:

var tweet; 

twit.get('http://api.twitter.com/1/statuses/user_timeline.json', function(data) { 
    tweet = data[0].text; 
}); 

console.log(tweet); 

分享Tweet仍然是不确定的。

请教育我:-)

回答

6

你想成为能够立即CONSOLE.LOG但Node.js的不同步,这就是使得它如此强大和快速。你必须习惯node.js的异步编码模式。获取请求是异步的。在回调发生之前,Tweet不会被分配。

Console.log在发出异步请求后立即执行。

尝试:(编辑 - 我认为这一点,然后问题被编辑成包括此代码)

twit.get('http://api.twitter.com/1/statuses/user_timeline.json', function(data) { 
    tweet = data[0].text; 
    console.log(tweet); // executed after call returns 
}); 

// executes immediately after request is sent 
console.log("request sent"); 

注意,第二个参数twit.get通话是将后得到执行的匿名函数已完成异步请求。

这应该是“请求发送”的输出,然后是该顺序的推文结果。

+0

很酷,谢谢。我更好地理解Node的异步特性以及为什么tweet首先显示为undefined。尽管如此,我仍然希望能够在我的代码中稍后在函数中使用tweet变量。这是可能的还是我必须在get的回调中嵌套这些函数?我怎么能确定它在调用其他函数之前已经得到推文了! – jaystewart

+0

如果其他代码需要在接收get之后执行并取决于get的结果,那么可以在get的回调函数中调用该代码。 – bryanmac

+0

谢谢。我希望我能够为您的答案投票,但我还没有声望:-( – jaystewart