存储来自twitter api的数据javascript(nodejs)

我似乎有一个问题。 我试图导出数据从Twitter的API,但我不能。 这是我的代码看起来像:

/// 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推送到数组它返回一个空数组 。 任何帮助,将不胜感激。

我build议使用Promises来允许调用代码使用返回的数据:

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

看起来这可能是一个asynchronous的问题。 我不熟悉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); }); 

这是相同的逻辑,但将asynchronous响应移到对您可能要做的更有用的地方。

您传递给get函数的第三个参数是callback 。 如果您在callback中为数组添加值并尝试在调用callback之前访问该数组,则该数组将为空/未定义。

我看到它的方式有两种select:

  1. 看看你的callback中需要做的工作。 直接或者通过callback函数。 编辑:看看@ JohnnyCoder的答案上面的后者。
  2. 考虑使用Promise 。 如果Twitter API不支持它,你可以考虑把callback变成一个承诺(通过包装结果)。 有关如何使用原生JavaScript API将callback转换为Promise的相当简单的教程,请查看此博文。