2016-03-22 11 views
0

以下のコードは、つぶやきとツイッターのデータを正常に返します。私の質問は今、sortTweets()で指定されたものなど、 。私が今直面している主な問題は、Twitter APIとJSの非同期性のために、getTweets()が必要なデータを返すまで待機する関数を指定する方法がわからないことです。つぶやき、ユーザーなどにこれを伝えるのが最も良い方法ですか、それともhandleTweets()関数内のつぶやきを整理する方が簡単でしょうか?twitterをソートして処理する最良の方法 - Twitter API

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) 
} 

答えて

1

どちらの方法では動作しますが、私はあなたがsortTweets()関数が呼び出されたときに、データまたはエラーで応答を受信して​​いることを確認することができますよう、handleTweets()機能に直接ソート処理することをお勧めしています処理することができます。

さらに、あなたのコードの一部がコールバックとNodeJSの非同期部分に精通していないことを示唆しているので、これを読むことをお勧めします。

EDIT:コードの正しさに

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'); 
    } 
} 

保証、それはのように見えることができるもののほんのラフ例:

あなたhandleTweetssortTweets機能はこのような何かを見ることができます。

+0

私は間違いなくそれを読んでいただきありがとうございます。 sortTweets()のelse ifセクションを取ってhandleTweets()に組み込むことは可能ですか? – user4357505

+0

提案と回答が更新されました –

+0

素晴らしい作品です。ありがとうございました! – user4357505

関連する問題