我使用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/