【问题标题】:Store data from twitter api javascript (nodejs)从 twitter api javascript (nodejs) 存储数据
【发布时间】:2017-06-09 03:48:58
【问题描述】:

我似乎遇到了问题。我正在尝试从 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 参数,它会返回 undefined,如果我将 data.users 推送到一个数组,它会返回一个 空数组。任何帮助都将不胜感激。

【问题讨论】:

    标签: javascript node.js api twitter


    【解决方案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);
    });
    

    【讨论】:

    • 我比我更喜欢这个答案 - 承诺绝对是一个更好的方法。 :-)
    • @JohnnyCoder 谢谢!回调模式仍然是一条非常好的路线。 :)
    • 哈哈,当您发布它时,我正在使用这两个建议输入回复! :P
    【解决方案2】:

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

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

    【讨论】:

    • 是的,这是一个异步问题。谢谢:-)
    【解决方案3】:

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

    在我看来,你有两个选择:

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

    【讨论】:

      猜你喜欢
      • 2010-10-18
      • 2015-08-01
      • 2021-08-18
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多