হ্যাঁ, প্রতিশ্রুতি অ্যাসিক্রোনাস কলব্যাক। কলব্যাকগুলি যা কিছু করতে পারে না সেগুলি তারা করতে পারে না এবং আপনি প্লে কলব্যাকের মতো অ্যাসিনক্রোনির ক্ষেত্রেও একই সমস্যার মুখোমুখি হন।
যাইহোক, প্রতিশ্রুতি আরও মাত্র callbacks হয়। এগুলি খুব শক্তিশালী বিমূর্ততা, কম ত্রুটি-প্রবণ বয়লারপ্লেট সহ ক্লিনার এবং আরও ভাল, কার্যকরী কোডের অনুমতি দিন।
তাহলে মূল ধারণাটি কী?
প্রতিশ্রুতি হ'ল একটি একক (অ্যাসিনক্রোনাস) গণনার ফলাফলকে উপস্থাপনকারী বস্তু। তারা সমাধান যে ফলাফল একবারে । এর অর্থ কয়েকটি জিনিস রয়েছে:
একটি পর্যবেক্ষক নিদর্শন বাস্তবায়নের প্রতিশ্রুতি দেয়:
- টাস্ক শেষ হওয়ার আগে আপনাকে কলব্যাকগুলি জানার দরকার নেই যা মানটি ব্যবহার করবে।
- আপনার ফাংশনগুলিতে আর্গুমেন্ট হিসাবে কলব্যাকগুলি প্রত্যাশার পরিবর্তে আপনি সহজেই
return
একটি প্রতিশ্রুতি বস্তুটি করতে পারেন
- প্রতিশ্রুতি মান সংরক্ষণ করবে, এবং আপনি যখন চান স্বচ্ছভাবে একটি কলব্যাক যোগ করতে পারেন। ফলাফল পাওয়া গেলে এটি ডাকা হবে। "স্বচ্ছতা" বলতে বোঝায় যে যখন আপনার কাছে কোন প্রতিশ্রুতি রয়েছে এবং এতে একটি কলব্যাক যোগ করবেন, ফলাফলটি এখনও এসেছে কিনা তা আপনার কোডে কোনও পার্থক্য রাখে না - এপিআই এবং চুক্তিগুলি একই, ক্যাশে / স্মৃতিচারণকে অনেক সরল করে তোলা।
- আপনি সহজেই একাধিক কলব্যাক যুক্ত করতে পারেন
প্রতিশ্রুতিগুলি শৃঙ্খলযোগ্য ( একাকী , যদি আপনি চান ):
- যদি আপনাকে কোনও প্রতিশ্রুতির প্রতিনিধিত্ব করে এমন মানটি রূপান্তর করতে হয় তবে আপনি প্রতিশ্রুতির উপরে রূপান্তর ফাংশনটি মানচিত্র করুন এবং রূপান্তরিত ফলাফলকে উপস্থাপন করে এমন একটি নতুন প্রতিশ্রুতি ফিরে পাবেন। আপনি এটি কোনওভাবে সিঙ্ক্রোনালি ব্যবহারের জন্য মানটি পেতে পারেন না তবে আপনি সহজেই তুলতে পারেন প্রতিশ্রুতি প্রেক্ষাপটে রূপান্তর। কোনও বয়লারপ্লেট কলব্যাক নেই।
- আপনি যদি দুটি অ্যাসিনক্রোনাস টাস্ক চেইন করতে চান তবে আপনি এই
.then()
পদ্ধতিটি ব্যবহার করতে পারেন । এটি প্রথম ফলাফলের সাথে কল করতে একটি কলব্যাক নেবে এবং কলব্যাক যে প্রতিশ্রুতি দেয় তার ফলাফলের জন্য একটি প্রতিশ্রুতি দেয়।
জটিল মনে হচ্ছে? একটি কোড উদাহরণের জন্য সময়।
var p1 = api1(); // returning a promise
var p3 = p1.then(function(api1Result) {
var p2 = api2(); // returning a promise
return p2; // The result of p2 …
}); // … becomes the result of p3
// So it does not make a difference whether you write
api1().then(function(api1Result) {
return api2().then(console.log)
})
// or the flattened version
api1().then(function(api1Result) {
return api2();
}).then(console.log)
সমতলকরণ যাদুতে আসে না তবে আপনি এটি সহজেই করতে পারেন। আপনার ভারী নেস্টেড উদাহরণের জন্য, (কাছাকাছি) সমতুল্য হবে
api1().then(api2).then(api3).then(/* do-work-callback */);
যদি এই পদ্ধতির কোডটি বোঝার ক্ষেত্রে সহায়তা করে তবে কয়েকটি লাইনে এটি একটি সর্বাধিক বুনিয়াদি প্রতিশ্রুতিবদ্ধ ।
প্রতিশ্রুতি সম্পর্কে বড় কলহ কি?
প্রতিশ্রুতি বিমূর্তি কার্যকারিতা আরও ভাল মিশ্রণযোগ্যতা অনুমতি দেয়। উদাহরণস্বরূপ, then
শৃঙ্খলার জন্য পরবর্তী , all
ফাংশনটি একাধিক সমান্তরাল-অপেক্ষার প্রতিশ্রুতিগুলির সম্মিলিত ফলাফলের জন্য একটি প্রতিশ্রুতি তৈরি করে।
অন্তিম তবে সর্বনিম্ন প্রতিশ্রুতি সমন্বিত ত্রুটি পরিচালনার সাথে আসে। গণনার ফলাফল হতে পারে যে প্রতিশ্রুতি একটি মান দিয়ে পূর্ণ হয়, বা এটি কোনও কারণে প্রত্যাখ্যান করা হয়। সমস্ত রচনা ফাংশন এটিকে স্বয়ংক্রিয়ভাবে পরিচালনা করে এবং প্রতিশ্রুতি শৃঙ্খলে ত্রুটিগুলি প্রচার করে, যাতে আপনার স্পষ্টভাবে সর্বত্র এটি সম্পর্কে যত্ন নেওয়া প্রয়োজন না - একটি সাধারণ-কলব্যাক প্রয়োগের বিপরীতে। শেষ পর্যন্ত, আপনি সমস্ত ঘটেছে ব্যতিক্রমগুলির জন্য একটি উত্সর্গীকৃত ত্রুটি কলব্যাক যোগ করতে পারেন।
জিনিসগুলিকে প্রতিশ্রুতিতে রূপান্তর করার কথা উল্লেখ না করে।
এটি আসলে ভাল প্রতিশ্রুতি গ্রন্থাগারগুলি সহ বেশ তুচ্ছ, দেখুন কীভাবে আমি বিদ্যমান কলব্যাক এপিআইকে প্রতিশ্রুতিতে রূপান্তর করব?