2015-04-18 10 views
11

एक छोटे से प्रोग्राम के हिस्से के रूप में मैं लिख रहा हूं, मैं एक फाइल के बड़े सेट को मार्कडाउन में बदलने के लिए गल्प का उपयोग करना चाहता हूं। यह कार्यक्रम से अलग एक निर्माण चरण का हिस्सा नहीं है। यह कार्यक्रम का एक हिस्सा है। तो मैं इसे संभालने के लिए एक gulpfile का उपयोग नहीं कर रहा हूँ।मैं अपने आवेदन में गलती का एक-एक उपयोग कैसे कर सकता हूं?

समस्या यह है कि, क्योंकि यह एसिंक है, मैं एक वादा का उपयोग करना चाहता हूं जो गल्प कार्य समाप्त होने पर मुझे सतर्क करेगा।

कुछ इस तरह आदर्श होगा:

io.convertSrc = function() { 
    var def = q.defer(); 

    gulp.src(src + '/*.md') 
    .pipe(marked({})) 
    .pipe(gulp.dest(dist), function() { 
     def.resolve('We are done!'); 
    }); 

    return def.promise; 
} 

लेकिन pipe एक कॉलबैक नहीं लेता है। मैं इसे कैसे संभाल सकता हूं? आपकी मदद के लिए धन्यवाद, मैं कुछ हद तक नया हूँ।

उत्तर

14

घूँट में सब कुछ, एक धारा है, ताकि आप केवल end और error घटनाओं के लिए सुन सकते हैं।

io.convertSrc = function() { 
    var def = q.defer(); 
    gulp.src(src + '/*.md') 
    .pipe(marked({})) 
    .pipe(gulp.dest(dist)) 
    .on('end', function() { 
     def.resolve(); 
    }) 
    .on('error', def.reject); 
    return def.promise; 
} 

एक अलग रूप में के रूप में, Q 1.0 नहीं रह गया है विकसित की है (एक तरफ यहाँ कुछ सुधारों से और वहाँ) और क्यू 2.0 के साथ पूरी तरह से असंगत हो जाएगा; मैं एक विकल्प के रूप में Bluebird की सिफारिश करता हूं।

इसके अलावा उल्लेख के लायक है कि NodeJS 0.12 के बाद ES6 वादे यह में निर्मित (कोई --harmony झंडा आवश्यक) है, इसलिए यदि आप पीछे की ओर संगतता के लिए नहीं देख रहे हैं तो आप सिर्फ उन्हें बजाय उपयोग कर सकते हैं ..

io.convertSrc = function() { 
    return new Promise(function(resolve, reject) { 
    gulp.src(src + '/*.md') 
     .pipe(marked({})) 
     .pipe(gulp.dest(dist)) 
     .on('end', resolve) 
     .on('error', reject); 
    }); 
}; 
+0

आह! हाँ! इसे महसूस करना चाहिए था! धन्यवाद! –

+1

इसके अलावा, मुझे नोड में ईएस 6 वादे समर्थन के बारे में कोई जानकारी नहीं थी। वह पागल/भयानक है। –

+1

मुझे केवल आज सुबह पता चला जब मेरा 'नया वादा' कॉल ब्लूबर्ड स्थापित किए बिना काम करता था। मैं एक पल के लिए बहुत उलझन में था। –

2

Gulp कार्य के बाद से एक धारा है, तो आप अपने घटनाओं के लिए सुन सकते हैं:

io.convertSrc = function() { 
    var def = q.defer(); 

    var stream = gulp.src(src + '/*.md') 
    .pipe(marked({})) 
    .pipe(gulp.dest(dist)); 

    stream.on('end', function() { 
    def.resolve(); 
    }); 

    stream.on('error', function(err) { 
    def.reject(err); 
    }); 

    return def.promise; 
}; 
संबंधित मुद्दे

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