【发布时间】:2017-03-25 05:56:43
【问题描述】:
我使用 Express 从 twitter 获取 twits 构建了一个应用程序。每次调用都获取 200 个 twits(如果数量较小,则更少),总量为 1800。我使用时间间隔来获取 twits 几次,并将最后一个 twit 的 id 作为下一次调用的第一个 twit 的 id。有时效果很好,但有时我会遇到这个错误:'Can\'t set headers after they are sent。'
我浏览了几个类似的线程,然后更新了我的错误说明以发送空 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);
});
});
【问题讨论】:
-
您在每 845 秒发生一次的 setInterval 中多次返回
res.send。在异步获取所有数据之前,您似乎不想调用res.send()。 -
嘿,这似乎有效。我刚刚在我的条件中创建了额外的 clearInterval 函数。谢谢!
标签: javascript node.js express