2012-07-04 122 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