2012-12-23 29 views
5

मैं समझने की कोशिश कर रहा हूं कि कैसे Mike Bostock's queue.js काम करता है, लेकिन मैं नहीं देख सकता कि यह कैसे काम करता है। जिस हिस्से को मैं समझ नहीं पा रहा हूं वह यह है कि कैसे कोड कॉलबैक निष्पादित करना जारी रखता है। विशेष रूप से, मैं pop() विधि (लाइन 45) के बारे में अनिश्चित हूं। मेरी समझ से, विधि अगले अप्रसन्न, स्थगित कार्य लेती है; एक कॉलबैक जोड़ता है जो (संभावित रूप से) कतार में अगले स्थगित फ़ंक्शन को प्रारंभ करता है और तत्काल पॉप फ़ंक्शन समाप्त होने पर निष्पादित करता है; फिर अंत में कार्य निष्पादित निष्पादित। मेरा सवाल है: इस कॉलबैक को कौन सा कोड निष्पादित करता है?queue.js कैसे काम करता है?

+1

यह कुछ बहुत ही खराब टिप्पणी वाला कोड है। –

+1

@ लाइटनेसरेसेसिन ऑर्बिट: यह एक बहुत छोटा और संक्षिप्त कोड है। परिवर्तनीय नाम वर्णनात्मक हैं और उनके कार्य पर टिप्पणी की गई है। मुझे इसे अधिक टिप्पणी करने का कोई कारण नहीं दिख रहा है ... – Bergi

+0

@ बर्गि: मैं केवल एक या दो की तरह पूछ रहा हूं। प्रत्येक समारोह क्या करता है इसका विवरण। ओपी का सवाल जरूरत को दर्शाता है। –

उत्तर

10

प्रत्येक स्थगित फ़ंक्शन वास्तव में कुछ भी वापस नहीं करता है - उन्हें कॉलबैक के रूप में अंतिम निर्णय निष्पादित करने की उम्मीद है। उदाहरण के लिए, इस

var foo = function(i) { 
    console.log(i); 
    return i; 
} 
var finished = function(error, results) { 
    console.log(results); 
} 

queue(2) 
    .defer(foo, 1) 
    .defer(foo, 2) 
    .defer(foo, 3) 
    .defer(foo, 4) 
    .awaitAll(finished); // only prints "1" and "2", since foo() doesn't execute callbacks 

काम करेंगे नहीं हालांकि, अगर हम foo संशोधित एक कॉलबैक लेने के लिए,

var foo = function(i, callback) { 
    console.log(i); 
    callback(null, i); // first argument is error reason, second is result 
} 

तो यह, queue जारी रखने के लिए के रूप में कॉलबैक को क्रियान्वित करने का कारण बनता है जाएगा।

+0

अच्छा उदाहरण, वास्तव में मेरी मदद की – megatron77

2

अगर मैं कोड सही ढंग से समझ, queue.await() और queue.awaitall()await उदाहरण चर में कॉलबैक कर दिया, और फिर इस notify() द्वारा निष्पादित किया जाता है।

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