Javascript |执行 for 循环的其他方法可能会在成功后中断?

标签 javascript node.js

所以我试图做一个for循环来获取所有机器人,但是如果我使用for循环,我在成功后无法取消循环,因为我正在使用回调。有没有其他方法可以执行 for 循环,以便我可以在获得成功答案后取消它。我尝试了 return truebreakreturn 其中任何一个都不起作用。

    var myMessages = [];
    for(var i = 0; i < bots.length; i++){
        if ( bots[i].getInventory().getItems().length < capacity ){  
            var executed = false;
            bots[i].createDeposit({
                steamid: req.query.steamid,
                token: req.query.token,
                itemsFromThem: uniqueItems,
                message: req.query.message,
                callback: function( err, dbTradeId ){
                    if ( !executed ){
                        executed = true;
                        if ( !err && dbTradeId ){
                            res.json({ result: 1, dbTradeId: dbTradeId });
                        } else {
                            console.log('» Tried to create deposit, but',err);
                            myMessages.push("Problem");
                            res.json({ error: err });                   
                        }
                    }
                }
            });
        } else {
            console.log('» Tried to create deposit, but no bot found(2)');
            myMessages.push("Available bot not found(2)");
        }
    }
    } else {
        console.log('» Tried to create deposit, but no bot found');
        myMessages.push("Available bot not found"); 
    }
} catch(e){
    return res.json({ error: e.message, stack: e.stack });
}
console.log(JSON.stringify( myMessages));

最佳答案

您的问题是循环将在调用第一个回调之前执行所有迭代,因此您无法取消它。指定函数来处理完成后的成功和失败怎么样?

var length = bots.length,
    iterator = 0;

checkBot(bots[iterator], done, fail);

function checkBot(bot, done, fail) {
    if ( bot.getInventory().getItems().length < capacity ){
        var executed = false;
        bot.screateDeposit({
            steamid: req.query.steamid,
            token: req.query.token,
            itemsFromThem: uniqueItems,
            message: req.query.message,
            callback: function( err, dbTradeId ){
                if ( !executed ){
                    executed = true;
                    if ( !err && dbTradeId ){
                        done(dbTradeId);
                    } else {
                        fail(err);
                    }
                }
            }
        });
    }
}

function done(dbTradeId) {
    // Dont continue after success? 
    res.json({ result: 1, dbTradeId: dbTradeId });
}

function fail(err) {

    // res.json({ error: err });

    // Check next bot?
    if(iterator++ < length){
        checkBot(bots[iterator], done, fail);
    }
}

关于Javascript |执行 for 循环的其他方法可能会在成功后中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41468418/

相关文章:

javascript - Ajax - JSON 不会仅在 PATCH 中发送

javascript - 我的滚动横幅代码哪里出了问题以使其正确滚动

javascript - 如何从 Node.js 中的 URL 获取

php - 如何同步 PHP 和 NodeJS 与 Redis 并按顺序获取数据

angularjs - 如何将 Angular 2 与 NetBeans 一起使用?

javascript - axios js从 Node 发送表单数据

node.js - 是否有 Node.js console.log 长度限制?

javascript - 如何在 Chart.js 中向垂直刻度(X 轴)添加填充?

javascript - 可以一个位置:fixed element with percentage width be calculated from body width?

javascript - 用于天气应用的圆形 slider