2016-12-01 4 views
-2

私はこのtryステートメントを持っていますが、それをさらに更新して2回以上試してみようとしています。私は成功しなかった。私はそれらを正しく行う方法がわかりません。誰も私のステートメントを修正する方法を知っていますか?複数の 'if'ステートメントを正しく作成する方法(node.js)

文の前(WORKS)

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; 
     } 

STATEMENTはAFTER

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

'promise'または' async'を使います。これはコールバック地獄です! https://www.npmjs.com/package/async – Niezborala

+1

コードのどの部分が「機能しません」?あなたは何を見たいですか?実際に何が起こるのですか?あなたのコンソールに例外やエラーはありますか? –

+0

あなたはなぜこれが間違っているのか説明できますか? – Petras

答えて

0

このコードを読み取って維持することが困難になります(動作しません)。それはうまくいくかもしれませんが、あなたが言ったように、別のいくつかの小切手を加えることは悪夢です。 (未テストコード)

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

今ではより多くのチェックを追加するのは簡単です、変更:

すなわちthe retry function

は今、あなたは、コードは次のようになり、非同期ライブラリを見てみましょう遅れなどがあります。制御フロー、非同期を手伝ってくれてありがとう! :)

関連する問題