以下代码成功返回推文和推特数据,我现在的问题是从twitter数组中排序和返回细节的最佳方法是什么,例如sortTweets()中指定的那些。我目前遇到的主要问题是,由于twitter API和JS的异步性质,我不知道如何指定函数等待getTweets()返回必要的数据,然后可以对其进行排序和修剪到推文,用户等。这是最好的方法,还是更容易在handleTweets()函数中对推文进行排序?
var Twit = require('twit');
var client = new Twit({
consumer_key: '',
consumer_secret: '',
access_token: '',
access_token_secret: '',
timeout_ms: 60*1000,
});
var count = 10,
profile = 'manutd',
date = '2011-11-11',
keyword = 'man city',
lan = 'en',
search = keyword + " since:" + date + " lang:" + lan;
var tweets = getTweets();
var profiles = getProfile();
console.log('Started')
//var sortedTweets = sortTweets(tweets);
//console.log(sortedTweets)
function handleTweets(err, data){
if (err) {
console.error('Get error', err)
}
else {
console.log('Get Tweets');
//console.log(data);
console.log('Finished');
}
}
function handleFriends(err, data){
if (err) {
console.error('Get error', err)
}
else {
console.log('Get Friends');
//console.log(data);
console.log('Finished');
}
}
function sortTweets (err, data, response) {
if (err) {
console.error('Get error', err)
}
else if (getTweets.ready){
for (var indx in data.statuses){
var tweet = data.statuses[indx];
console.log('on: ' + tweet.created_at + ' : @' + tweet.user.screen_name + ' : ' + tweet.text+'\n\n');
}
}
else {
setTimeout(sortTweets,100);
}
}
function getTweets(){
return client.get('search/tweets', { q: search, count: count, from: profile },
handleTweets)
}
function getProfile( callback ){
return client.get('friends/list', { screen_name: profile, count: count },
handleFriends)
}
答案 0 :(得分:1)
两种方式都有效,但我建议直接在handleTweets()
函数中处理排序,因为您可以确保在调用sortTweets()
函数时,您将收到数据的响应或者可以处理的错误。
此外,我建议您阅读:http://callbackhell.com/,因为您的代码部分建议您不熟悉回调和NodeJS的异步部分,这在第一次使用时确实相当棘手。
修改强>
您的handleTweets
和sortTweets
功能可能如下所示:
function handleTweets(err, data){
if (err) {
console.error('Get error', err)
} else {
console.log('Get Friends');
//console.log(data);
console.log('Finished, no error, data is ready');
sortTweets(data);
}
}
function sortTweets (data) {
for (var indx in data.statuses){
var tweet = data.statuses[indx];
console.log('on: ' + tweet.created_at + ' : @' + tweet.user.screen_name + ' : ' + tweet.text+'\n\n');
}
}
不保证代码的正确性,只是一个粗略的例子。