所以我试图做一个for循环来获取所有机器人,但是如果我使用for循环,我在成功后无法取消循环,因为我正在使用回调。有没有其他方法可以执行 for 循环,以便我可以在获得成功答案后取消它。我尝试了 return true
、break
、return
其中任何一个都不起作用。
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);
}
}
我是一名优秀的程序员,十分优秀!