如何停止迭代迭代| Node.js和MongoDB

时间:2015-05-14 07:46:38

标签: javascript node.js mongodb

这里有一点问题,这让我花了太长时间才解决。我可能是个白痴,因为我觉得这是一个简单的问题,但我无法绕过它。所以这是代码:

 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的错误。这比任何事情都更具逻辑性。所以问题是,如何停止迭代(如标题中所述)。任何帮助表示赞赏。

2 个答案:

答案 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。