এতে দোষ কী?
কিন্তু প্যাটার্ন কাজ করে!
ভাগ্যবান তুমি. দুর্ভাগ্যক্রমে, সম্ভবত এটি হবেনা, আপনি সম্ভবত কিছু প্রান্তের কেসটি ভুলে গেছেন। আমি যে ঘটনাগুলি দেখেছি তার অর্ধেকেরও বেশিটিতে, ত্রুটি পরিচালকের যত্ন নিতে লেখক ভুলে গিয়েছেন:
return new Promise(function(resolve) {
getOtherPromise().then(function(result) {
resolve(result.property.example);
});
})
যদি অন্য প্রতিশ্রুতি প্রত্যাখাত হয়, তবে নতুন প্রতিশ্রুতি প্রচার করার পরিবর্তে এটি নজরে না আসবে (যেখানে এটি পরিচালনা করা হবে) - এবং নতুন প্রতিশ্রুতি চিরতরে মুলতুবি থেকে যায়, যা ফাঁস হতে পারে।
আপনার কলব্যাক কোডটি ত্রুটির কারণ ঘটায় একই জিনিস ঘটে - যেমন কখন result
না থাকেproperty
এবং ব্যতিক্রম ছুঁড়ে দেওয়া হয়। এটি নিরবচ্ছিন্ন হয়ে যাবে এবং নতুন প্রতিশ্রুতিটি অমীমাংসিত ছেড়ে দেবে।
বিপরীতে, ব্যবহার .then()
এই দুটি পরিস্থিতিতেই স্বয়ংক্রিয়ভাবে যত্ন নেয় এবং কোনও ত্রুটি ঘটলে নতুন প্রতিশ্রুতি প্রত্যাখ্যান করে:
return getOtherPromise().then(function(result) {
return result.property.example;
})
মুলতুবি অ্যান্টিপ্যাটার্ন কেবল জটিলই নয়, ত্রুটি- প্রবণও । .then()
শিকল দেওয়ার জন্য ব্যবহার করা অনেক বেশি নিরাপদ।
তবে আমি সব কিছু পরিচালনা করেছি!
সত্যি? ভাল. যাইহোক, এটি বেশ বিস্তারিত এবং কৌতুকপূর্ণ হবে, বিশেষত যদি আপনি কোনও প্রতিশ্রুতি পাঠাগার ব্যবহার করেন যা বাতিলকরণ বা বার্তা প্রেরণের মতো অন্যান্য বৈশিষ্ট্যগুলিকে সমর্থন করে। অথবা ভবিষ্যতে এটি হতে পারে, বা আপনি একটি ভাল এর বিরুদ্ধে আপনার লাইব্রেরি অদলবদল করতে চান? আপনি তার জন্য আপনার কোডটি আবার লিখতে চাইবেন না।
গ্রন্থাগারগুলির পদ্ধতিগুলি ( then
) কেবল স্থানীয়ভাবে সমস্ত বৈশিষ্ট্যকে সমর্থন করে না, তাদের স্থানে কিছু নির্দিষ্ট অপ্টিমাইজেশনও থাকতে পারে। এগুলি ব্যবহার করা সম্ভবত আপনার কোডটি দ্রুততর করবে বা কমপক্ষে গ্রন্থাগারের ভবিষ্যতে সংশোধন করে অনুকূলিত হওয়ার অনুমতি দেবে।
আমি কীভাবে এড়াতে পারি?
সুতরাং আপনি যখনই নিজেকে ম্যানুয়ালি তৈরি করতে দেখেন Promise
বা Deferred
ইতিমধ্যে বিদ্যমান প্রতিশ্রুতি জড়িত থাকে, প্রথমে লাইব্রেরি এপিআই পরীক্ষা করে দেখুন । বিলম্বিত antipattern প্রায়ই যারা প্রতিশ্রুতি দেখতে দ্বারা প্রয়োগ করা হয় [শুধুমাত্র] একটি পর্যবেক্ষক প্যাটার্ন হিসাবে - কিন্তু প্রতিশ্রুতি হয় আরো callbacks চেয়ে তারা অনুমিত হয় composable যাবে। প্রতিশ্রুতিবদ্ধ পদ্ধতিতে প্রতিশ্রুতি রচনার জন্য প্রতিটি শালীন গ্রন্থাগারের প্রচুর সহজেই ব্যবহারযোগ্য ফাংশন রয়েছে, আপনি যে সমস্ত নিম্ন-স্তরের জিনিসগুলি মোকাবেলা করতে চান না তার যত্ন নিয়ে।
যদি আপনি কোনও নতুন উপায়ে এমন কিছু প্রতিশ্রুতি রচনা করার প্রয়োজন খুঁজে পেয়েছেন যা কোনও বিদ্যমান সহায়ক ফাংশন দ্বারা সমর্থিত নয়, আপনার নিজের ফাংশনটি অনিবার্য ডিফার্ডস দিয়ে লেখার জন্য আপনার শেষ বিকল্প হওয়া উচিত। আরও বৈশিষ্ট্যযুক্ত লাইব্রেরিতে স্যুইচ করা বিবেচনা করুন এবং / বা আপনার বর্তমান লাইব্রেরির বিরুদ্ধে একটি বাগ ফাইল করুন। এর রক্ষণাবেক্ষণকারীটি বিদ্যমান ফাংশনগুলি থেকে রচনাটি তৈরি করতে, আপনার জন্য একটি নতুন সহায়ক ফাংশন বাস্তবায়ন করতে সক্ষম হতে হবে এবং / অথবা পরিচালনা করতে হবে এমন প্রান্তের কেসগুলি সনাক্ত করতে সহায়তা করতে হবে।
getStuffDone
ফাংশন র্যাপারটি সরিয়ে কেবল প্রতিশ্রুতি আক্ষরিক ব্যবহার করতে হবে?