如何正确地创建多个'if'语句(node.js)

时间:2016-12-01 16:03:10

标签: javascript node.js steam

我有这个尝试声明,我想用更多if更新它,并在最终拒绝优惠之前再尝试2次。我没有成功。我不知道如何正确地做到这一点。有谁知道如何修改我的陈述?

之前的声明(工作)

try {
    offers.acceptOffer({tradeOfferId: offer.tradeofferid}, function(err, log) {
        if (err) { 
            helper.log('Error accepting trade offer ' + offer.tradeofferid, 891, err);
            offers.declineOffer({tradeOfferId: offer.tradeofferid}, function() {
                currentGameOffers.splice(currentGameOffers.indexOf(offer.tradeofferid), 1);
            }); 
            return;
        }

声明之后(不要工作)

try {
    offers.acceptOffer({tradeOfferId: offer.tradeofferid}, function(err, log) {
        if (err) { 
            helper.log('Error accepting trade offer: 1st try' + offer.tradeofferid, 891, err);
            offers.acceptOffer({tradeOfferId: offer.tradeofferid}, function(err, log) {
                if (err) { 
                    helper.log('Error accepting trade offer: 2nd try ' + offer.tradeofferid, 891, err);
                    offers.acceptOffer({tradeOfferId: offer.tradeofferid}, function(err, log) {
                        if (err) { 
                            helper.log('Error accepting trade offer: 3rd try ' + offer.tradeofferid, 891, err);
                            offers.acceptOffer({tradeOfferId: offer.tradeofferid}, function(err, log) {
                                if (err) { 
                                    helper.log('Offer declined: failed 3 times ' + offer.tradeofferid, 891, err);
                                    offers.declineOffer({tradeOfferId: offer.tradeofferid}, function() {
                                        currentGameOffers.splice(currentGameOffers.indexOf(offer.tradeofferid), 1);
                                    });
                                    return;
        }

1 个答案:

答案 0 :(得分:0)

该代码看起来很难阅读和维护。它可能有用,但就像你说的那样,添加另外几张支票是一场噩梦。

查看异步库,即the retry function

现在您的代码看起来像这样: (代码未经测试)

async.retry(3, function( retryCb, prevResult){ offers.acceptOffer({tradeOfferId: offer.tradeofferid}, retryCb); }, function(err, result) { if( err){ //decline offer } // do something with the result });

现在可以轻松添加更多检查,更改延迟等。感谢您帮助控制流,异步! :)