2015-04-17 13 views
12

एक गल्प कार्य में पैरामीटर "done" क्या करता है यह स्पष्ट करने के लिए बस एक साधारण सवाल है?गुलप "विधि" विधि क्या करता है?

मैं समझता हूं, यह नीचे दिखाए गए कार्य फ़ंक्शन में कॉलबैक है।

gulp.task('clean', function(done) { 
    // so some stuff 
    creategulptask(cleantask(), done); 
}); 

लेकिन इसे पास करने का कारण क्या है?

उत्तर

20

घूंट प्रलेखन निम्न जैसा कुछ निर्दिष्ट करता है।

आपका कार्य फ़ंक्शन "कॉलबैक स्वीकार कर सकता है" फ़ंक्शन पैरामीटर (अक्सर इस फ़ंक्शन पैरामीटर को done नाम दिया जाता है)। यह निष्पादित करना कि done फ़ंक्शन गुलप को बताता है कि "कार्य पूरा होने पर इसे बताने का संकेत"। यदि आप कार्यों कि एक दूसरे पर निर्भर करते हैं, जैसा कि ऊपर के उदाहरण में दिखाया की एक श्रृंखला ऑर्डर करने के लिए चाहते हैं

Gulp इस संकेत की जरूरत है। (यानी कार्य two कार्य one कॉल cb() पर शुरू नहीं होगा) संक्षेप में, यदि आप उन्हें नहीं चाहते हैं तो यह कार्य एक साथ चलने से रोकता है।

आप यहां इसके बारे में अधिक पढ़ सकते हैं: https://github.com/gulpjs/gulp/blob/master/docs/API.md#async-task-support

+1

अच्छी तरह से समझाया गया। धन्यवाद @ सीयर – Nexus23

+2

बस जिज्ञासा है, गलप कैसे जांचता है और जानता है, अगर मैं उसे जो फ़ंक्शन देता हूं वह पैरामीटर है या नहीं? जावास्क्रिप्ट में यह कैसे संभव है? यह प्रतिबिंब की तरह लगता है। –

+0

कॉलबैक विशेष रूप से उपयोगी होता है यदि आपको कार्य के अंदर एसिंक प्रक्रिया चलाने की आवश्यकता होती है, जबकि आप कार्य को लौटने से पहले पूरा करने के लिए प्रतीक्षा करना चाहते हैं।अन्यथा, बस स्ट्रीम लौटने के लिए पर्याप्त हो सकता है। Https://github.com/gulpjs/gulp/blob/master/docs/API.md#async-task-support – grtjn

-3

done पैरामीटर कॉलबैक नहीं है, अनाम function कॉलबैक है। done बस एक तर्क है कि आप पर किसी भी कारण से अपनी कॉलबैक विधि पास कर सकते हैं।

एक घूंट कार्य typically defined as है:

gulp.task('somename', function() { 
    // Do stuff 
}); 

समारोह आप परिभाषित कर सकते हैं क्या कोड कार्य भीतर क्रियान्वित किया जाता है। इस कोड को किसी भी तर्क पर निर्भर है, तो आप उन्हें समारोह पैरामीटर के रूप में में पारित कर सकते हैं:

gulp.task('birthdayTask', function(name, dateOfBirth) { 
    doFancyStuff(name, dateOfBirth); 
}); 

आपके मामले में, done शायद एक और कॉलबैक है कि जैसे ही cleantask() विधि समाप्त क्रियान्वित किया जाता है। तो जब क्लींटस्क किया जाता है तो यह कुछ प्रकार की अधिसूचना तंत्र के रूप में कार्य करेगा। हालांकि, यह आपके कोड से नहीं लिया जा सकता है, क्योंकि आपने अपने cleantask() फ़ंक्शन का कोड प्रदान नहीं किया है, इसलिए बस अनुमान लगाएं।

var gulp = require('gulp'); 

// Takes in a callback so the engine knows when it'll be done 
// This callback is passed in by Gulp - they are not arguments/parameters 
// for your task. 
gulp.task('one', function(cb) { 
    // Do stuff -- async or otherwise 
    // If err is not null and not undefined, then this task will stop, 
    // and note that it failed 
    cb(err); 
}); 

// Identifies a dependent task must be complete before this one begins 
gulp.task('two', ['one'], function() { 
    // Task 'one' is done now, this will now run... 
}); 

gulp.task('default', ['one', 'two']); 

किया तर्क कॉलबैक फ़ंक्शन आप अपने कार्यों को परिभाषित करने के लिए उपयोग करने में पारित कर दिया गया है:

+0

समझ गया। क्या यह अजाक्स में असीमित तंत्र के समान है? – Nexus23

+3

यह गलत है। आप इस तरह के गल्प कार्यों में तर्क पारित नहीं कर सकते हैं, आपको उपलब्ध कई तर्क प्रोसेसर में से एक का उपयोग करना होगा। मेरा जवाब देखें – Seer

+1

कम से कम [gulp-param] (https://github.com/stoeffel/gulp-param) प्लगइन का उपयोग करके, कार्य कार्यों को तर्क देना संभव है। मैं थोड़ी देर पहले ऐसा कर रहा हूं। यद्यपि आप स्टॉक गल्प के लिए सही हो सकते हैं। मैं क्षमाप्रार्थी हूं। – user1438038

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