2016-11-27 6 views
0

Heres мой сырой код, в основном он пытается принять «Торговое предложение», и если он терпит неудачу, он будет отклонен. Как мне заставить повторить эту инструкцию в одном и том же «Торговом предложении» 10 раз с интервалом в пару секунд, и если после этого все еще не удается, отклоните предложение?Как правильно повторить попытку утверждения на узле?

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

Поскольку он асинхронный: рекурсия. Обратите внимание, что 'try' /' catch' не работает. – Bergi

ответ

0

Что-то с setTimeout() по обратному вызову. Обещание или даже ES2017 async-wait (babel, TypeScript) поможет вам получить более чистый код. Кроме того, поскольку в обратном вызове распространяется ошибка, нет необходимости использовать блок try, если только api, который вы используете, не сможет сработать сразу, но обычно не в стиле обратного вызова.

function putOffer(maxRetries) { 
    offers.acceptOffer({tradeOfferId: offer.tradeofferid}, function(err, log) { 
     if (err) { 
      if (maxRetries > 0) { 
       setTimeout(function() { putOffer(maxRetries - 1); }, 2000); 
       return; 
      } 
      helper.log('Error accepting trade offer ' + offer.tradeofferid, 891, err); 
      ... 
      return; 
     } 
    }); 
} 

putOffer(10); 
+0

Спасибо за ответ, извините за мой вопрос, но если я изменил свое утверждение с «try» на «function», как вы писали, это повлияет на мой код плохо? Причина theres «улавливать» заявления в моем коде, а позже на – Petras

+0

. Try/catch обычно улавливает ошибки только в вашем коде, например, для установки необъявленной переменной. Обычно в асинхронном коде нет необходимости. Это очень редко для попытки поймать в вашем коде, если вы сами не хотите выполнять проверки и «бросать». Я бы сказал, посмотрите на api, чтобы увидеть, может ли он бросить. В любом случае вам нужно иметь что-то полезное в предложении catch. В противном случае вам просто нужен глобальный обработчик uncaughtException. Https://nodejs.org/api/process.html#process_event_uncaughtexception –

+0

Я действительно не знаю, что такое «бросок», но мое, если мое приложение получает некоторую нагрузку на API, он падает и разрушает весь MongoDB, и он должен начать – Petras

 Смежные вопросы

  • Нет связанных вопросов^_^