Кажется, у меня проблема. Я пытаюсь экспортировать данные из 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 в массив, он вернет пустой массив. Любая помощь будет и будет оценена.
Я предлагаю использовать 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);
});
Похоже, это может быть проблема асинхронного вызова. Я не знаком с API Twitter, но вы можете попробовать (или изменить) следующее:
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);
});
Это та же логика, но перемещение асинхронного ответа на место, более полезное для того, что вы пытаетесь сделать.
Третий параметр, который вы передаете в функцию get
является callback
. Если вы добавите значение в массив внутри обратного вызова и попытаетесь получить к нему доступ до вызова обратного вызова, этот массив будет пустым/неопределенным.
Как я вижу это, у вас есть два варианта: