2016-11-13 1 views
0

Когда я использовал функцию async.until(), я заметил, что тест не вызывает повторного вызова, хотя возвращает false. В результате функция не вызывается для выполнения следующей задачи.В функции проверки async.until (тест, функция, обратный вызов) не вызывается повторно

var resultReceived = false; 
async.until(function(){ 
    console.log("Checking result : "+resultReceived); 
      return resultReceived; 
}, function(callback){ 
    try{ 
     //do something 
     resultReceived = true; 
    }catch(err){ 
     resultReceived = false; 
    } 
}, function(result){ 
      console.log("===================="); 
      console.log(result); 
      callback(result); 
}); 
+0

Да - это происходит потому, что асинхронная означает, что он не ждет, пока предыдущее выполнение, чтобы завершить, прежде чем начать следующий - см. этот ответ http://stackoverflow.com/questions/748175/asynchronous-vs-synchronous-execution-what-does-it-really-mean – mike510a

+0

Да, я понимаю. но если вы проверите эту документацию [https://caolan.github.io/async/docs.html#until], она сообщит, что она повторно вызывает главную функцию до тех пор, пока тест не вернет true. Вот почему мне было интересно. – Angshuman

ответ

1

Причина, по которой вы видите только одну функцию, вызванную однажды, состоит в том, что вы никогда не продвигались мимо первой итерации. Чтобы перейти от одной итерации к следующей, вам нужно вызвать callback во второй функции, которую вы передаете async.until.

Вот немного модифицированный пример, который покажет тестовую функцию быть вызвана с каждой итерации:

var iteration = 0; 
async.until(function(){ 
    console.log("Checking iteration : " + iteration); 
    return iteration > 5; 
}, function(callback){ 
    console.log(++iteration); 
    setTimeout(callback, 1000); 
}, function(result){ 
    console.log("===================="); 
    console.log(result); 
});