Недавно я начал изучать node.js, мой первый подход к асинхронным функциям, но я просто не могу обернуть его вокруг. Я довольно плохо объясняю, что я имею в виду со словами, поэтому приведу пример.Сохранение результатов функции Async для последующего использования
В приведенном ниже коде я использую асинхронную библиотеку для прокрутки массива имен пользователей twitter и получения их последнего твита (используя библиотеку twitter, переменную twit). Все твиты собираются в переменной результатов как массив, который я могу использовать в последней функции обратного вызова. Сходство - это функция, которую я написал, она просто возвращает число.
async.map(screenNames,function(name,callback){
twit.get('/statuses/user_timeline.json', {screen_name: name, count : 1}, function(data) {
callback(null,data[0]['text']);
});
},function(err,results){
console.log(similarity(results));
});
скажи, что я хочу, чтобы повторить эту операцию каждые X секунд с помощью setInterval и каждый раз проверить, если пользователи твиттере что-то новое (то есть, если чирикать мы только что получили, отличается от той, которую мы имеем раньше) и если они есть, сохраните новый твит и так далее.
Как я могу хранить их твиты, чтобы сравнивать их с результатами каждой итерации?
Я пробовал делать следующее без успеха.
setInterval(function(){
async.map(screenNames,function(name,callback){
twit.get('/statuses/user_timeline.json', {screen_name: name, count : 1}, function(data) {
callback(null,data[0]['text']);
});
},function(err,results){
console.log(similarity(results));
});
console.log(results+'outside async');
},2000,[screenNames,similarity]);
Что привело к «console.log (результаты +„вне асинхронном“), результаты не определен»
Затем я попытался
setInterval(function(){
async.map(screenNames,function(name,callback){
twit.get('/statuses/user_timeline.json', {screen_name: name, count : 1}, function(data) {
callback(null,data[0]['text']);
});
},function(err,results){
console.log(similarity(results));
});
//console.log(results);
},2000,[screenNames,similarity]);
что привело к одной правильной итерации, а затем " callback (null, data [0] ['text']); не может прочитать текст свойства undefined (я уверен, что это не совсем связано)
И, наконец,
setInterval(function(){
async.map(screenNames,function(name,callback){
twit.get('/statuses/user_timeline.json', {screen_name: name, count : 1}, function(data) {
callback(null,data[0]['text']);
});
},function(err,results){
console.log(results);
});
console.log(results+'outside async');
},2000,[screenNames]);
Который привел снова к «console.log (результаты +« наружу async »); Результаты не определен»
Может кто-нибудь мне точку, где я сделал ошибку? Может быть, недостаток в том, как я подойти к этому?
Спасибо большое за чтение моего вопроса.
EDIT : кажется, что моя функция подобия как-то ломает приложение это довольно большая функция, поэтому я выложу усеченную версию
function similarity(phrases){
if(phrases.length ==2){
//Lots of stuff
//concerning the phrases happen here
// and a variable called similarity is produced which
//contains a number
return similarity;
}else{
throw "Can only find similarity between 2 phrases";
}
}
Это работает отлично, пока я не попытаюсь использовать функцию, которую я написал. Он работает правильно во время первой итерации и разбивается на вторую с этой ошибкой: «строка не является функцией». Любая идея, что может быть причиной этого? –
Nevermind, получается, что это не связанная проблема, я отправлю еще один вопрос. Большое спасибо за ответ! –