这里有一点问题,这让我花了太长时间才解决。我可能是个白痴,因为我觉得这是一个简单的问题,但我无法绕过它。所以这是代码:
get_online = function (err, result) {
if (err) {
return next(err);
}
streamers_size = result.length;
result.map(
function (entry) {
curl.get
.to('https://api.twitch.tv/kraken/streams/' + entry.uname)
.then(update_streamers);
}
);
},
update_streamers = function (err, result) {
var clean;
if (err) {
return next(err);
}
if (result.stream) {
db.collection('streamers').update({
_id: result.stream.channel._id
}, {
$set: {
stream_preview: result.stream.preview.large,
viewers: result.stream.viewers
}
}, send_response);
}
else {
clean = result._links.channel.substring(result._links.channel.length, 38);
db.collection('streamers').update({
uname: clean
}, {
$set: {
stream_preview: 'offline',
viewers: 0
}
}, send_response);
}
},
发生的事情是,每当对api的失败请求触发update_streamers回调并触发if(错误)时,它都会发回头:return next(err)
,但是如果失败的请求是连续的呢?因此,它会重复发送标题,直到我收到Can't send headers that are already set blah blah
的错误。这比任何事情都更具逻辑性。所以问题是,如何停止迭代(如标题中所述)。任何帮助表示赞赏。
答案 0 :(得分:0)
创建一个变量errorCount
并将其初始化为0.每当出现错误时,请增加它。如果是5,那就停止尝试。如果成功,请将errorCount
设置为0。
答案 1 :(得分:0)
也许试试
if(typeof err == "undefined")
抱歉不确定我脑子里的全面实施。 如果在该函数作用域中存在名为err的变量,则将触发if(错误)版本。如果调用代码发送的变量不是false / undefined /"" / 空值。
不确定是否要允许此
或者甚至
err = err || false;
当err为null /&#34时,此行将触发;" / undefined / false 并将其设置为false。