从twitter api javascript(nodejs)存储数据

时间:2017-06-08 17:05:23

标签: javascript node.js api twitter

我似乎遇到了问题。我试图从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'})

如果我尝试返回数据参数,则返回 undefined ,如果我将data.users推送到数组,则返回空数组。任何帮助都将受到赞赏。

3 个答案:

答案 0 :(得分: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);
});

这是相同的逻辑,但将异步响应移动到对您可能尝试的更有用的地方。

答案 1 :(得分:1)

我建议使用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);
});

答案 2 :(得分:0)

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

我看到它的方式,你有两个选择:

  1. 考虑在回调中完成所需的工作。直接或通过将回调传递给函数。编辑:查看@ JohnnyCoder上面针对后者的答案。
  2. 考虑使用Promise。如果Twitter API不支持它,您可以考虑将回调转换为承诺(通过环绕结果)。有关如何使用本机JavaScript API将回调转换为Promise的相当简单的教程,请查看this blog post.