বিকল্প
এর বিকল্প:
async function main() {
try {
var quote = await getQuote();
console.log(quote);
} catch (error) {
console.error(error);
}
}
স্পষ্টভাবে প্রতিশ্রুতি ব্যবহার করে এমন কিছু হবে:
function main() {
getQuote().then((quote) => {
console.log(quote);
}).catch((error) => {
console.error(error);
});
}
বা এই জাতীয় কিছু, ধারাবাহিকতা পাসিং শৈলী ব্যবহার করে:
function main() {
getQuote((error, quote) => {
if (error) {
console.error(error);
} else {
console.log(quote);
}
});
}
আসল উদাহরণ
আপনার আসল কোডটি যা করে তা হ'ল কার্যকরকরণ স্থগিত করা এবং প্রতিশ্রুতি মীমাংসিত হয়ে ফিরে আসার জন্য অপেক্ষা করুন getQuote()
। এরপরে এটি কার্যকর করা চালিয়ে যায় এবং এতে প্রত্যাবর্তিত মানটি লিখে দেয়var quote
প্রেরণ করে এবং তারপরে প্রতিশ্রুতিটি সমাধান করা হলে এটি মুদ্রণ করে, বা একটি ব্যতিক্রম ছুঁড়ে দেয় এবং ক্যাপ ব্লকটি চালায় যা প্রতিশ্রুতি প্রত্যাখ্যান করা হলে ত্রুটিটি মুদ্রণ করে।
আপনি দ্বিতীয় উদাহরণের মতো সরাসরি প্রতিশ্রুতি এপিআই ব্যবহার করে একই জিনিসটি করতে পারেন।
কর্মক্ষমতা
এখন, পারফরম্যান্সের জন্য। আসুন এটি পরীক্ষা!
আমি কেবল এই কোডটি লিখেছি - একটি ফেরতের মান হিসাবে f1()
দেয় 1
, ব্যতিক্রম হিসাবে f2()
ছোঁড়ে 1
:
function f1() {
return 1;
}
function f2() {
throw 1;
}
এখন একই কোডটি মিলিয়ন বার কল করা যাক, এর সাথে প্রথম f1()
:
var sum = 0;
for (var i = 0; i < 1e6; i++) {
try {
sum += f1();
} catch (e) {
sum += e;
}
}
console.log(sum);
এবং তারপরে এর পরিবর্তন f1()
করা যাক f2()
:
var sum = 0;
for (var i = 0; i < 1e6; i++) {
try {
sum += f2();
} catch (e) {
sum += e;
}
}
console.log(sum);
এটি আমি পেয়েছি ফলাফল f1
:
$ time node throw-test.js
1000000
real 0m0.073s
user 0m0.070s
sys 0m0.004s
এটিই আমি পেয়েছিলাম f2
:
$ time node throw-test.js
1000000
real 0m0.632s
user 0m0.629s
sys 0m0.004s
দেখে মনে হচ্ছে যে আপনি এক মিলিত থ্রেড প্রক্রিয়াতে 2 মিলিয়ন সেকেন্ড নিক্ষেপ করার মতো কিছু করতে পারেন। আপনি যদি এর থেকে বেশি কাজ করে থাকেন তবে আপনার এটি সম্পর্কে চিন্তা করতে হবে।
সারসংক্ষেপ
আমি নোডের মতো জিনিসগুলি নিয়ে চিন্তা করব না। যদি এর মতো জিনিসগুলি খুব বেশি ব্যবহৃত হয় তবে এটি শেষ পর্যন্ত ভি 8 বা স্পাইডারমোনকি বা চক্র দলগুলি দ্বারা অনুকূলিত হবে এবং প্রত্যেকে অনুসরণ করবে - এটি নীতি হিসাবে অনুকূলিত নয়, এটি কেবল সমস্যা নয় a
এমনকি যদি এটি অপ্টিমাইজড না হয় তবে আমি এখনও তর্ক করব যে আপনি যদি নোডে আপনার সিপিইউটি বের করে নিয়ে থাকেন তবে আপনার সম্ভবত সিতে আপনার নম্বর ক্রাঞ্চিং লিখতে হবে - অন্যান্য জিনিসের মধ্যে নেটিভ অ্যাডোনগুলির জন্য এটি। অথবা নোড.নেটিভের মতো জিনিসগুলি নোড.জেএস এর চেয়ে কাজের জন্য উপযুক্ত হবে maybe
আমি ভাবছি এমন কোনও ব্যবহারের ক্ষেত্রে কী হতে পারে যাতে এতগুলি ব্যতিক্রম ছোঁড়া উচিত। সাধারণত কোনও মান ফেরত দেওয়ার পরিবর্তে ব্যতিক্রম ছুঁড়ে ফেলা ভাল, ব্যতিক্রম।