2015-03-11 3 views
10

के साथ सफलता/विफलता निर्धारित करना मैं node.js मॉड्यूल async का अध्ययन कर रहा हूं, लेकिन मुझे फ़ंक्शन async.retry के साथ कुछ समस्याएं हैं।node.js फ़ंक्शन async.retry

github docs, के अनुसार यह कार्य तब तक कार्य करने की कोशिश जारी रखेगा जब तक कि यह सफल न हो जाए या संभावनाओं का उपयोग न हो जाए। लेकिन मेरा काम सफलता या विफलता कैसे बता सकता है?

मैं नीचे दिए गए कोड की कोशिश की:

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

मैं इसे count === 1 तक चलने की उम्मीद है, लेकिन यह हमेशा इस प्रिंट:

-2 undefined 
undefined undefined 

तो कैसे मैं समारोह सही ढंग से उपयोग कर सकते हैं?

+0

एसिंक कार्य में 'बाइंड' के उपयोग को दिखाने के लिए धन्यवाद। मैं सिर्फ यह समझने की कोशिश कर रहा था कि तर्क कैसे पारित किया जाए। – Ali

उत्तर

5

आप अपने else -branch को विफल करने के लिए चाहते हैं। इसके लिए, आपको त्रुटि पैरामीटर में कुछ पास करने की आवश्यकता है; वर्तमान में आप केवल undefined पास करते हैं जो सफलता का संकेत देता है - और यही वह है जो आप वापस आते हैं।

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

मुझे पूरी तरह से बचने का कारण यह है कि यह दस्तावेज़ में नहीं है कि कॉलबैक आपके द्वारा पुनः प्रयास किए जा रहे फ़ंक्शन का पहला पैरामीटर होना चाहिए। – Ali

+1

@Ali: उह, वास्तव में यह है [दाएं वहाँ] (https://github.com/caolan/async#retry): "*' कार्य (कॉलबैक, परिणाम) '- एक समारोह जो दो तर्क प्राप्त करता है: (1) ए कॉलबैक ... * " – Bergi

+0

हाँ, मैंने अभी पढ़ा है कि _task_ क्या है। मेरी गलती। – Ali

संबंधित मुद्दे