2017-01-10 4 views
1

У меня есть яваскрипт функции, как показано нижеRetry Javascript функция несколько раз, прежде чем вернуться мне ошибка

var url = 'test' 

var pingStatus = false 


createjob(url, function(err, client){ 
     client.ImportData(obj, function(err, result) { 
      if(result.Import[0] ==='1') 
      { 
       pingStatus = true 
       console.log("Worked") 
      } 
      else 
      { 
       pingStatus = false 
       console.log("Didnt Work") 
      } 
     }); 
}); 

Я хочу, чтобы иметь возможность попробовать создать эту работу в 3 раз, и если он не в 3 раза, я хочу запустите некоторую другую функцию, которая делает что-то еще.

Я пробовал цикл for и пытался вырваться из цикла for, но получал сообщение о том, что перерыв был незаконным. (оператор if находится в функции обратного вызова)

Может ли кто-нибудь указать мне в правильном направлении, чтобы добиться этого.

Я также попытался проверки с глобальной переменной «pingSatus», но она не работает, как код выполняется до того, как переменная pingStatus устанавливается в если заявления

+1

рекурсия - это один поисковый термин - также изучите, как работать с асинхронным кодом –

ответ

0

Поскольку я не знаю, что ваша работа именно делать, я будете предлагать что-то вроде этого:

var url = 'test' 
 

 
var pingStatus = false 
 

 
var yourJob = { 
 
\t iteration: 0, 
 
\t /*yourJobLogic: function(url, function(err, client){ 
 
     client.ImportData(obj, function(err, result) { 
 
      if(result.Import[0] ==='1') 
 
      { 
 
       pingStatus = true 
 
       console.log("Worked") 
 
      } 
 
      else 
 
      { 
 
       pingStatus = false 
 
       console.log("Didnt Work") 
 
      } 
 
     }); 
 
\t },*/ 
 
\t yourJobLogic: function(n){ 
 
\t \t this.iteration++; 
 
\t \t console.log("Trying to do the job for the " + this.iteration + " time..."); 
 
\t \t var yourConditionToPass = (n===123); 
 
\t \t if(this.iteration>=3){ 
 
\t \t \t console.error("We tried 3 times and your job doesn't work, exit!"); 
 
\t \t \t throw "Your number can(t be used...."; 
 
\t \t }else{ 
 
\t \t \t if(yourConditionToPass){ 
 
\t \t \t \t console.info("Your job is done."); 
 
\t \t \t \t return true; 
 
\t \t \t } 
 
\t \t \t this.yourJobLogic(n); 
 
\t \t } 
 
\t }, 
 
\t doJob: function(n){ 
 
     this.iteration = 0; 
 
\t \t this.yourJobLogic(n); 
 
\t } 
 
}; 
 

 
var result = yourJob.doJob(123); 
 
console.log(result); 
 
//outputs: 
 
// Trying to do the job for the 1 time... 
 
// Your job is done. 
 

 
var result = yourJob.doJob(789); 
 
/* outputs: 
 
Trying to do the job for the 1 time... 
 
Trying to do the job for the 2 time... 
 
Trying to do the job for the 3 time... 
 
We tried 3 times and your job doesn't work, exit!Uncaught Your number can(t be used... 
 
*/

Все, что вам нужно сделать, это изменить yourJobLogic и yourConditionToPass.

Вам это поможет?

0
var url = 'test' 

var pingStatus = false 

var tryTimes = 0; 

createjob(url, function(err, client){ 
     client.ImportData(obj, function(err, result) { 
      if(result.Import[0] ==='1') 
      { 
       pingStatus = true; 
       tryTimes = 0; 
       console.log("Worked"); 
      } 
      else 
      { 
       pingStatus = false; 
       console.log("Didnt Work"); 
       tryTimes += 1; 
       arguments.callee(err, result); 
       if(tryTimes === 3){ 
        tryTimes = 0; 
        YOURFUNCTIONTORUN(); 
       } 
      } 
     }); 
}); 
Смежные вопросы