2015-03-11 13 views
10

node.js modülü async çalışıyorum, ancak async.retry işleviyle ilgili bazı sorunlarım var.node.js işleviyle başarı/başarısızlık belirleme async.retry

github docs, 'a göre, işlev başarılı olana kadar veya devam edene kadar görevi denemeye devam edecektir. Ama görevim nasıl başarı ya da başarısızlık gösterebilir?

ben aşağıdaki kodu çalıştı: Ben count === 1 kadar devam bekliyoruz

var async = require('async'); 

var opts = { 
    count : -3 
}; 

async.retry(5, function (cb, results) { 
    ++this.count; 
    console.log(this.count, results); 
    if (this.count > 0) cb(null, this.count); 
    else cb(); 
}.bind(opts), function (err, results) { 
    console.log(err, results); 
}); 

, ama her zaman bu yazdırır:

-2 undefined 
undefined undefined 

Peki nasıl doğru işlevini kullanabilirsiniz?

+0

Eşzamansız görevde bind işlevini kullandığınız için teşekkür ederiz. Sadece argümanların nasıl geçeceğini anlamaya çalışıyordum. – Ali

cevap

5

else -branch'inizin başarısız olmasını istersiniz. Bunun için hata parametresine bir şey iletmeniz gerekir; Şu anda sadece başarı sinyallerini veren undefined'u geçiyorsunuz - ve bu geri dönüşünüz.

async.retry(5, function (cb, results) { 
    ++this.count; 
    console.log(this.count, results); 
    if (this.count > 0) cb(null, this.count); 
    else cb(new Error("count too low")); 
}.bind(opts), function (err, results) { 
    console.log(err, results); 
}); 
+0

Tamamen beni kaçar neden, geri arama, yeniden denemek istediğiniz işlevin ilk parametresi olması gerektiği belgelerinde yok. – Ali

+1

@Ali: Uh, aslında burası [https://github.com/caolan/async#retry]: "*' görevi (geri arama, sonuçlar) "- İki argüman alan bir işlev: (1) a geri dönüş… * " – Bergi

+0

Evet, sadece _task_'ın ne olduğunu okudum. Benim hatam. – Ali