2016-04-08 11 views
0

私はtwitterを使って作業しています。特定のユーザーのツイートと言及を取得しようとしていますが、時間。私が見た同様の質問によれば、この問題を解決するにはコールバック関数が必要ですが、私はnode.jsをかなり新しくしているので苦労しています。私の問題は、つぶやきと言及のための2つのclient.getsがありますが、私は1つしかコールできないので、コールバック関数が必要です。Node.jsでtwitter apiを使用しているときにコールバック関数を実装する方法

jsonx = {}; 
    function mentions(x){ 
    client.get('search/tweets', {q:"@"+x, count:1}, 
    function (err,data){ 
     for(var index in data.statuses){ 
     var tweet = data.statuses[index]; 
     console.log(tweet.text); 
     jsonx[index] = tweet 
     } 
     res.end(JSON.stringify(jsonx)) 
    }) 
    } 


    function tweets(y){ 
    client.get('statuses/user_timeline', {screen_name:"@"+y, count:1}, 
    function(err,data) { 
     for(var index in data){ 
     var tweet = data[index]; 
     console.log(tweet.text); 
     jsonx[index] = tweet 

     } 
      res.end(JSON.stringify(jsonx)); 
    }) 
    } 

私はつぶやきからすべてのクエリを取得するためにコールバック機能を実装し、同時に言及できる方法上の任意の助け。

は、あなたが今持っているライブラリは、これは本当に簡単になるだろうTwitterの約束を使用するクライアント、あるいは単に「Promisifying」を使用して、あなたに スティーブ

+0

有するものでコールバック関数は、2つの異なるclient.get同時に呼び出すことはできませんに対応するため。なぜそうしたいのか教えてもらえますか?おそらく回避策を提案できますか? – trans1st0r

+0

@DevJyotiBehera私は両方の関数から得たすべてのつぶやきを集め、同じJSONオブジェクトに追加したいと思います。 –

答えて

3

ありがとうございます。

私はこれを行うためにBluebird.jsをお勧めします。あなたはそのルートを行くことにした場合、これはそれがうまくいく方法です。

1)

var Promise = require('bluebird'); 

2)NPM経由でインストールした後に(約束のライブラリを必要とする)ブルーバードのを使用して要求をするために新しい関数を作成します方法を約束する。

var clientGet = Promise.promisify(client.get, client); 

3)は、joinとして、同時に2つの要求を行うために集約プロミスメソッドを使用します。

Promise.join(
    clientGet('search/tweets', {q:"@"+x, count:1}), 
    clientGet('statuses/user_timeline', {screen_name:"@"+y, count:1}), 
    function(tweets, timeline) { 
     //other stuff here, including res.end/json/send/whatever 
    } 
) 
0

あなたは、単一のオブジェクト内の両方の関数の結果を格納したいので、あなたは、ベストプラクティスとしてasyncモジュールを使用することができます。

var async = require('async'); 

async.series([ 
    function(_cb){ 
    //call function 1 here and fire _cb callback 
    }, 
    function(_cb){ 
    //call function 2 here and fire _cb callback 
    } 
], function(error, response) { 
    if(e) { 
    //handle error 
    } 
    else { 
    //handle response object here. It will be an array of responses from function_1 and function_2 
    } 
}); 
関連する問題