【问题标题】:How to make multiple 'if' statements correctly (node.js)如何正确地制作多个“if”语句(node.js)
【发布时间】:2016-12-01 16:03:09
【问题描述】:

我有这个 try 声明,我想用更多的 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;
        }

【问题讨论】:

  • 使用promiseasync。这是回调地狱! npmjs.com/package/async
  • 代码的哪一部分“不起作用”?你期待看到什么?实际发生了什么?您的控制台中是否有任何异常或错误?
  • 你们能解释一下为什么会这样吗?
  • @DanO 好吧,基本上首先尝试接受报价“offers.acceptOffer”,如果出现错误,它会记录并拒绝。我希望它再试 2 次。
  • @Petras - 你确定所有的{ 都有匹配的},我认为甚至还有一些缺失的) 但它非常很难分辨这是写的。

标签: javascript node.js steam


【解决方案1】:

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

看一下异步库,即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 });

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多