【问题标题】:Is an infinite loop impossible in nodejs?nodejs中的无限循环是不可能的吗?
【发布时间】:2014-08-05 01:11:51
【问题描述】:

出于某种原因,我试图构思一个简单的脚本,它可以从给定的 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);
        }
    });
}

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

【问题讨论】:

  • 在编写时,您的程序看起来有点像拒绝服务攻击。立即向 Web 服务器发送 HTTP 请求是不好的做法,并且很可能会在短时间内阻止您的 IP 地址。
  • 你说得对,我也注意到它并尝试使用 sleep 但无法安装它 - 由于某种原因无法正常工作
  • 问题是,即使我在最后放置了一个繁忙的循环,它似乎也不起作用。

标签: node.js twitter


【解决方案1】:

你不能在 node.js 中使用while (1) 进行 IO 操作,因为它会阻塞事件循环并阻止所有回调被调用。如果你想永远做某事,你需要使用递归:

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

        doThing();
    });
}

【讨论】:

  • 这种方法最终不会导致栈溢出吗?
【解决方案2】:

如果你想这样做,我建议使用setInterval(function, time)。您可以随时使用clearInterval(unterval) 停止间隔。

【讨论】:

    猜你喜欢
    • 2016-03-19
    • 2011-02-24
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多