我使用Express从Twitter提取推特构建了一个应用程序。每个呼叫取回200 twit(如果数目较小,则取较少),总金额为1800。我使用时间间隔取回twits几次,并将最后一个twit的id作为下一个呼叫的第一个twit的id传递。有时效果很好,但有时我会遇到此错误:“发送标头后无法设置标头。”

我浏览了几个类似的线程,然后更新了错误说明以发送空的res对象。但这并没有改变任何东西。如何解决我的代码以摆脱此错误?

T.get('statuses/user_timeline', {screen_name: account, count: 200} , function(err, data){
    if(err){return res.send();};

    var i = 0;
    last_id = data[data.length-1].id_str;
    for(var n in data)
    {
        twits.push({content: data[n].text, date: data[n].created_at});
    }
    if(data.length < 200){
        var twitsToSend = filter(twits);
        return res.send(twitsToSend);
    }

        var getTwits = setInterval(function()
        {
            T.get('statuses/user_timeline', {screen_name: account, count: 200, max_id: last_id},function(err,data){
                if(err){return res.send();};

                last_id = data[data.length-1].id_str;
                if(data.length < 200){
                    var twitsToSend = filter(twits);
                    return res.send(twitsToSend);

                }
                for(var n in data)
                {
                    twits.push({content: data[n].text, date: data[n].created_at});
                }

            });
                ++i;
                if(i==9)
                    {
                        clearInterval(getTwits);
                        var twitsToSend = filter(twits);
                        return res.send(twitsToSend);
                    };
        },845);

    });
});

最佳答案

您应该将clearInterval(getTwits);添加到getTwits函数的内部:

if(data.length < 200){
                clearInterval(getTwits);
                var twitsToSend = filter(twits);
                return res.send(twitsToSend);
            }


现在,如果Twitter API返回的结果少于200个,则您执行res.send,但不要停止间隔计时器,因此它将获取更多结果,然后再次尝试,这可能是错误的根源。

关于javascript - NodeJS'发送后无法设置标题。',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43009676/

10-16 20:13