প্রথম পরামিতি কেন?
নোড.জেএস এর অ্যাসিক্রোনাস প্রকৃতির কারণে, প্রথম-প্যারামিটার-এর- এরর প্যাটার্নটি ইউজারল্যান্ড নোড.জেএস এর ত্রুটি পরিচালনার জন্য একটি কনভেনশন হিসাবে সুপ্রতিষ্ঠিত হয়েছে । এটি অ্যাসিক্রোনাস কারণ:
try {
setTimeout(function() {
throw 'something broke' //Some random error
}, 5)
}
catch(e) {
//Will never get caught
}
সুতরাং পরিবর্তে কলব্যাকের প্রথম যুক্তিটি হ'ল ত্রুটিগুলি কেবল নিক্ষেপ করা ব্যতীত পাস করার একমাত্র বুদ্ধিমান উপায়।
এটি করার ফলে এমনটি ঘটবে unhandled exception
যা কেবল শোনাচ্ছে এমনভাবে বোঝায় যে অ্যাপ্লিকেশনটিকে তার বিভ্রান্তিকর অবস্থার বাইরে নিয়ে যাওয়ার জন্য কিছুই করা হয়নি।
ব্যতিক্রম, কেন তাদের অস্তিত্ব আছে
তবে এটি লক্ষণীয় যে, নোড.জেসের কার্যত সমস্ত অংশই ইভেন্ট-প্রেরক এবং ব্যতিক্রম ছোঁড়া একটি নিম্ন-স্তরের ইভেন্ট যা সমস্ত ইভেন্টের মতো পরিচালনা করা যায়:
//This won't immediately crash if connection fails
var socket = require("net").createConnection(5000);
socket.on("error", function(err) {
console.error("calm down...", err)
});
এই কিন্তু-shouldn't করতে চরম নিয়ে যাওয়া হবে সমস্ত ত্রুটি ধরা এবং আপনাকে একটি আবেদন যা খুবই কঠিন কখনো বিপর্যস্ত চেষ্টা করবে না। এটি প্রায় প্রতিটি ব্যবহারের ক্ষেত্রে একটি ভয়ানক ধারণা, কারণ এটি অ্যাপ্লিকেশন অবস্থায় কী চলছে সে সম্পর্কে কোনও ধারণা ছাড়াই এটি বিকাশকারীকে ছেড়ে যাবে এবং ট্রাই-ক্যাচ-এ মূল মোড়কের সাথে সাদৃশ্যপূর্ণ।
ডোমেনগুলি - যৌক্তিকভাবে ইভেন্টগুলি গোষ্ঠীভুক্ত করা
অ্যাপ্লিকেশনগুলি পড়ে যাওয়ার ব্যতিক্রমগুলির এই সমস্যার সাথে মোকাবিলার অংশ হিসাবে, ডোমেনগুলি বিকাশকারীকে উদাহরণস্বরূপ এক্সপ্রেস.জেএস অ্যাপ্লিকেশন গ্রহণের অনুমতি দেয় এবং বিপর্যয়কর ব্যর্থতার ঘটনায় সংবেদনশীলতার সাথে সংযোগগুলি বন্ধ করে দেওয়ার চেষ্টা করে এবং বন্ধ করে দেয়।
ES6
সম্ভবত এটি উল্লেখ করা হচ্ছে যে এটি আবার পরিবর্তিত হবে কারণ ইএস 6 জেনারেটর প্যাটার্নটিকে অ্যাসিঙ্ক্রোনাস ইভেন্টগুলি তৈরি করতে দেয় যা এখনও চেষ্টা / ধরার ব্লকগুলির সাথে ধরা যায়।
কোয়া (এক্সপ্রেস.জেএস-এর একই মূল লেখক টি জে হোলোয়াকাক লিখেছেন) লক্ষণীয়ভাবে এটি করে। এটি yield
ব্লকগুলি তৈরি করতে ES6 বিবৃতি ব্যবহার করে যা প্রায় সিঙ্ক্রোনাস প্রদর্শিত হলেও সাধারণ নোড অ্যাসিনক্রোনাস ফ্যাশনে পরিচালনা করা হয়:
app.use(function *(next) {
try {
yield next;
}
catch (err) {
this.status = err.status || 500;
this.body = err.message;
this.app.emit('error', err, this);
}
});
app.use(function *(next) {
throw new Error('some error');
})
এই উদাহরণটি নির্লজ্জভাবে এখান থেকে চুরি করা হয়েছিল ।