出于某种原因,我试图构想一个简单的脚本,该脚本可以从给定的Twitter帐户中检索推文,然后使用它进行处理(这并不是真正相关的部分)。遵循朋友的建议,我尝试在nodejs中进行操作。他帮了我一些忙(实际上给了我一些代码),然后我设法使工作正常。因此,如果我想从一个用户那里检索所有推文,则效果很好。但是实际上我想要循环并检查新的推文。但是,当我将代码包装在简单的while(1)中(并根据需要对其进行修改)时,它什么也没做。所以这是我的代码:
var tweetFetcher = require('./tweetFetcher');
var codeExtractor = require('./codeExtractor');
var open = require('open');
var fs = require('fs');
var filters = [filter1, filter2];
var hasfirstpart = 0;
var code = "";
var tweets;
var i = 0;
while(1){
tweets = tweetFetcher.getFrom('twitteraccount', function(tweets) {
console.log(tweets[0]);
if(tweets[0].indexOf(filters[hasfirstpart]) > -1){
code += codeExtractor.extract(tweets[0]).substring(3);
hasfirstpart = (hasfirstpart+1)%2;
console.log(code);
}
if(hasfirstpart == 0 && code != ""){
...
}
});
}
var parser = require('cheerio');
var request = require('request');
exports.getFrom = function(username, cb) {
var url = "http://twitter.com/"+username;
request(url, function(err, resp, body) {
var $ = parser.load(body);
var tweets = [];
$('.ProfileTweet-text').each(function() {
tweets.push($(this).text());
});
if(typeof cb == 'function') {
cb(tweets);
}
});
}
Run Code Online (Sandbox Code Playgroud)
您是否知道为什么不能将其包装成一个圈?预先感谢您的回复:)
你不能while (1)在node.js中使用IO操作,因为它会阻塞事件循环并阻止所有回调被调用。如果你想永远做某件事,你需要使用递归:
function doThing () {
tweetFetcher.getFrom('twitteraccount', function(tweets) {
...
doThing();
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3558 次 |
| 最近记录: |