যেহেতু আপনার টাস্কে অ্যাসিক্রোনাস কোড থাকতে পারে আপনার কাজ শেষ করার পরে আপনাকে গল্প সিগন্যাল করতে হবে (= "অ্যাসিঙ্ক সমাপ্তি")।
গুল্প 3.x এ আপনি এটি না করেই পালাতে পারবেন। আপনি যদি সুস্পষ্টভাবে অ্যাসিঙ্ক সমাপ্তির ঝাঁকুনিটি সিগন্যাল না করেন তবে কেবল ধরে নেওয়া হবে যে আপনার টাস্কটি সুসংগত এবং আপনার টাস্ক ফাংশনটি ফিরে আসার সাথে সাথে এটি শেষ হয়ে গেছে। গুলপ 4.x এই ক্ষেত্রে কঠোর। আপনি করতে হবে স্পষ্টভাবে কাজটি সমাপ্তির সংকেত দেন।
আপনি এটি ছয়টি উপায়ে করতে পারেন :
আপনি যদি কেবল কিছু মুদ্রণের চেষ্টা করছেন তবে এটি সত্যিই কোনও বিকল্প নয়, তবে আপনি সাধারণত ঝাল স্ট্রিমের সাথে কাজ করছেন বলে এটি সম্ভবত সবচেয়ে ঘন ঘন ব্যবহৃত অ্যাসিঙ্ক সমাপ্তির প্রক্রিয়া। আপনার ব্যবহারের ক্ষেত্রে এটি প্রদর্শিত (বরং স্বীকৃত) উদাহরণ:
var print = require('gulp-print');
gulp.task('message', function() {
return gulp.src('package.json')
.pipe(print(function() { return 'HTTP Server Started'; }));
});
এখানে গুরুত্বপূর্ণ অংশটি হল return
বিবৃতি। আপনি যদি স্ট্রিমটি ফিরিয়ে না দেন, কবে স্ট্র্যাপটি শেষ হবে তা নির্ধারণ করতে পারে না।
এটি আপনার ব্যবহারের ক্ষেত্রে আরও উপযুক্ত সরঞ্জাম। মনে রাখবেন যে বেশিরভাগ সময় আপনাকে Promise
অবজেক্টটি নিজে তৈরি করতে হবে না , এটি সাধারণত কোনও প্যাকেজ সরবরাহ করে (যেমন ঘন ঘন ব্যবহৃত del
প্যাকেজটি একটি দেয় Promise
)।
gulp.task('message', function() {
return new Promise(function(resolve, reject) {
console.log("HTTP Server Started");
resolve();
});
});
অ্যাসিঙ্ক / অপেক্ষার সিন্ট্যাক্স ব্যবহার করে এটিকে আরও সহজ করা যায়। সমস্ত ফাংশন async
স্পষ্টভাবে একটি প্রতিশ্রুতি ফেরত দেয় যাতে নিম্নলিখিতগুলিও খুব কার্যকর হয় (যদি আপনার নোড.জেএস সংস্করণ এটি সমর্থন করে ):
gulp.task('message', async function() {
console.log("HTTP Server Started");
});
3. কলব্যাক ফাংশন কল করুন
এটি সম্ভবত আপনার ব্যবহারের ক্ষেত্রে সহজতম উপায়: গল্পটি স্বয়ংক্রিয়ভাবে একটি কলব্যাক ফাংশনকে তার প্রথম যুক্তি হিসাবে আপনার কাজটিতে পাস করে। আপনার কাজ শেষ হয়ে গেলে কেবল সেই ফাংশনটি কল করুন:
gulp.task('message', function(done) {
console.log("HTTP Server Started");
done();
});
এটি বেশিরভাগ ক্ষেত্রে দরকারী যদি আপনাকে সরাসরি কোনও কমান্ড লাইন সরঞ্জাম শুরু করতে হয় কারণ কোনও নোড.জেএস র্যাপার উপলব্ধ নেই। এটি আপনার ব্যবহারের ক্ষেত্রে কাজ করে তবে স্পষ্টতই আমি এটির সুপারিশ করব না (বিশেষত যেহেতু এটি খুব বেশি বহনযোগ্য নয়):
var spawn = require('child_process').spawn;
gulp.task('message', function() {
return spawn('echo', ['HTTP', 'Server', 'Started'], { stdio: 'inherit' });
});
আমি এই প্রক্রিয়াটি কখনও ব্যবহার করি নি, তবে আপনি যদি আরএক্সজেএস ব্যবহার করেন তবে এটি কার্যকর হতে পারে। আপনি কেবল কিছু মুদ্রণ করতে চাইলে এটি একধরণের ওভারকিল:
var of = require('rxjs').of;
gulp.task('message', function() {
var o = of('HTTP Server Started');
o.subscribe(function(msg) { console.log(msg); });
return o;
});
পূর্ববর্তীটির মতো আমি এটি সম্পূর্ণতার জন্য অন্তর্ভুক্ত করছি তবে আপনি ইতিমধ্যে EventEmitter
কোনও কারণ ব্যবহার না করে আপনি এটি ব্যবহার করছেন এমন কিছু নয়।
gulp.task('message3', function() {
var e = new EventEmitter();
e.on('msg', function(msg) { console.log(msg); });
setTimeout(() => { e.emit('msg', 'HTTP Server Started'); e.emit('finish'); });
return e;
});
webpack-stream
। এটি ব্যবহার করুন: github.com/shama/webpack-stream/issues/…