当前位置 : 主页 > 网页制作 > Nodejs >

node.js – nodejs中无法实现无限循环吗?

来源:互联网 收集:自由互联 发布时间:2021-06-16
出于某种原因,我试图构思一个简单的脚本,可以从给定的Twitter帐户检索推文,然后用它做一些事情(这不是真正相关的部分).根据朋友的建议,我试着在nodejs中做到这一点.他帮了我一点(实际
出于某种原因,我试图构思一个简单的脚本,可以从给定的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);
        }
    });
}

你知道为什么它不能被包裹在循环中吗?在此先感谢您的回复:)

您不能在具有IO操作的node.js中使用while(1),因为它将阻止事件循环并阻止调用所有回调.如果你想永远做一些事情,你需要使用递归:

function doThing () {
    tweetFetcher.getFrom('twitteraccount', function(tweets) {
        ...

        doThing();
    });
}
网友评论