2017-06-08 8 views
1

私は問題があるようです。私はTwitterのAPIからデータをエクスポートしようとしていますが、できません。ここに私のコードは次のようになります。twitterからデータを保存api javascript(nodejs)

/// Twitter.js 
module.exports = Twitter 

function Twitter(twitter) { 
    this.twitter = twitter 
} 

Twitter.prototype.friends = function(params) { 
    this.twitter.get('friends/list', params, (err, data) => { 
     if (err) 
      console.log(err) 

     console.log(data) // this prints data to the console but 
          // I want to export and save in a data structure 
          // array or object 
    } 
} 

///bot.js 
var Twit = require('twit') 
var config = require('/path_to_config.js') 
var init = Twit(config) 
var Twitter = require('/path_to_Twitter.js') 

var bot = new Twitter(config) 
bot.friends({ screen_name: 'myscreenname'}) 

私はデータのパラメータを返すしようとした場合、私はそれが空の配列を返す配列にdata.usersをプッシュする場合、それは未定義を返します。どんな助けもありがたいです。

答えて

1

私は、返されたデータで動作するように、呼び出し元のコードを許可するように約束を使用することをお勧め:

Twitter.prototype.friends = function(params) { 
    return new Promise((resolve, reject) => { 
     this.twitter.get('friends/list', params, (err, data) => { 
      if (err) { 
       reject(err); 
      } else { 
       resolve(data); 
      } 
     }); 
    }); 
} 

... 
var bot = new Twitter(config) 
bot.friends({ screen_name: 'myscreenname'}).then((data) => { 
    // do something with data 
    console.log(data); 
}).catch((err) => { 
    console.error(err); 
}); 
+0

私はこの答えが私のものより好きです - 確かに行くより良い方法です。 :-) – JohnnyCoder

+0

@ JohnnyCoderありがとう!コールバックパターンはまだ完全に良いルートです。 :) –

+0

母私はあなたがそれを投稿したときに、これらの提案の両方を使用して回答を入力していました! :P – rageandqq

1

非同期の問題があるようです。私はTwitterのAPIに精通していないんだけど、あなたはしてみてください(または変動)可能性があり、次の

Twitter.prototype.friends = function(params, cb) { 
    this.twitter.get('friends/list', params, cb); 
}; 

そして:

var bot = new Twitter(config) 
bot.friends({ screen_name: 'myscreenname'}, (err, data) => { 
    // Do something with the data here. 
    console.log('data', data); 
}); 

それは同じロジックですが、非同期応答を移動しますあなたがしようとしている可能性のある場所にもっと役立つ場所に移動します。

+0

これは非同期問題でした。ありがとうございました:-) – m8r1x

0

あなたはget関数に渡している第三のパラメータはcallbackです。コールバック内の配列に値を追加し、コールバックが呼び出される前にその配列にアクセスしようとすると、その配列は空/未定義になります。あなたは、コールバック内で必要な仕事をしているに

  1. ルック:

    私はそれを参照してください方法は、次の2つのオプションがあります。直接、またはコールバックを関数に渡します。編集:後者については、上記の@ JohnnyCoderの答えをチェックしてください。

  2. Promiseを使用することを検討してください。 Twitter APIがそれをサポートしていない場合は、コールバックを約束に変えることを検討することができます(結果をラップすることによって)。ネイティブJavaScript APIを使用してコールバックをプロミスに変換する方法の簡単なチュートリアルについては、this blog post.
+0

それは約束してうまくいきますありがとう:-) – m8r1x

関連する問題