প্রতিশ্রুতিগুলির একমাত্র সমস্যাটি হ'ল আইই তাদের সমর্থন করে না। এজ করে, তবে এখানে প্রচুর পরিমাণে আইই 10 এবং 11 রয়েছে: https://developer.mozilla.org/en-US/docs/Web/JavaScript/ উল্লেখ / গ্লোবাল_অবজেক্টস / প্রমিস (নীচে সামঞ্জস্যতা)
সুতরাং, জাভাস্ক্রিপ্ট একক থ্রেডযুক্ত। আপনি যদি অ্যাসিক্রোনাস কল না করেন তবে এটি পূর্বাভাসের সাথে আচরণ করবে। মূল জাভাস্ক্রিপ্ট থ্রেড পরবর্তী কোডটি কার্যকর করার আগে একটি ক্রিয়াকলাপ সম্পূর্ণরূপে চালিত করবে, যাতে তারা কোডটিতে প্রদর্শিত হবে। সিঙ্ক্রোনাস ফাংশনগুলির জন্য আদেশের গ্যারান্টি দেওয়া তুচ্ছ - প্রতিটি ফাংশন এটি ডাকা আদেশ অনুসারে সম্পূর্ণরূপে কার্যকর হবে।
সিঙ্ক্রোনাস ফাংশনটিকে কাজের একটি পারমাণবিক ইউনিট হিসাবে ভাবেন । মূল জাভাস্ক্রিপ্ট থ্রেড এটিকে পুরোপুরি কার্যকর করবে, ক্রমে বিবৃতিগুলি কোডে প্রদর্শিত হবে।
তবে, নিম্নলিখিত পরিস্থিতিতে যেমন অ্যাসিক্রোনাস কলটি নিক্ষেপ করুন:
showLoadingDiv(); // function 1
makeAjaxCall(); // function 2 - contains async ajax call
hideLoadingDiv(); // function 3
এটি আপনি যা চান তা করে না । এটি তাত্ক্ষণিকভাবে ফাংশন 1, ফাংশন 2 এবং ফাংশন 3 সম্পাদন করে div ডিভি ফ্ল্যাশ লোড হচ্ছে এবং এটি শেষ হয়ে গেছে, যদিও এজ্যাক্স কলটি প্রায় সম্পূর্ণ নয়, যদিও makeAjaxCall()
ফিরে এসেছে। কমপ্লিকেশনটি হ'ল makeAjaxCall()
মূল কাজকর্মের থ্রেডের প্রতিটি স্পিনে অল্প অল্প করে উন্নত - এর কাজগুলি অংশগুলিতে পরিণত করেছে - এটি আশ্রয়জনকভাবে আচরণ করছে। তবে একই মূল থ্রেড, একটি স্পিন / রান চলাকালীন, সিঙ্ক্রোনাস অংশগুলি দ্রুত এবং পূর্বাভাসের সাথে কার্যকর করে।
সুতরাং, আমি যেভাবে এটি পরিচালনা করেছি : যেমনটি আমি বলেছিলাম যে ফাংশনটি কাজটির পারমাণবিক ইউনিট। আমি ফাংশন 1 এবং 2 এর কোডটি সংযুক্ত করেছি - অ্যাসিঞ্চ কলের আগে আমি ফাংশন 1 এর কোডটি ফাংশন 2 তে রেখেছি। আমি ফাংশন 1 থেকে মুক্তি পেয়েছি 1 অ্যাসিনক্রোনাস কল সহ সমস্ত কিছু এবং যথাযথভাবে কার্যকর হয়।
তারপরে, মূল জাভাস্ক্রিপ্ট থ্রেডের কয়েকটি স্পিনের পরে যখন অ্যাসিঙ্ক্রোনাস কলটি সম্পূর্ণ হয়, তখন এটি ফাংশন 3 কল করুন This এটি আদেশটির গ্যারান্টি দেয় । উদাহরণস্বরূপ, এজ্যাক্স সহ, অ্যানড্রিস্টেটচেঞ্জ ইভেন্ট হ্যান্ডলারকে একাধিকবার বলা হয়। এটি যখন রিপোর্ট হয়ে গেছে এটি সম্পূর্ণ হয়ে যায়, তারপরে আপনি চান চূড়ান্ত ফাংশনটি কল করুন।
আমি রাজি আছি এটি মেসিয়ার। আমি কোডটি প্রতিসম হতে পছন্দ করি, আমার একটি কাজ (বা এটির কাছে) ফাংশন করা পছন্দ হয় এবং এজাক্স কলটি কোনওভাবেই ডিসপ্লের জন্য দায়ী হওয়া (কলারের উপর নির্ভরতা তৈরি করা) পছন্দ করি না। কিন্তু, একটি সিঙ্ক্রোনাস ফাংশনে এম্বেড করা একটি অ্যাসিঙ্ক্রোনাস কল সহ, মৃত্যুদন্ড কার্যকর করার আদেশের নিশ্চয়তা দিতে আপস করতে হবে। এবং আইই 10 এর জন্য আমাকে কোড করতে হবে তাই কোনও প্রতিশ্রুতি নেই।
সংক্ষিপ্তসার : সিঙ্ক্রোনাস কলগুলির জন্য, গ্যারান্টিং অর্ডার তুচ্ছ। প্রতিটি ফাংশন সম্পূর্ণরূপে ডেকে আনে যাতে এটি ডাকা হত। অ্যাসিঙ্ক্রোনাস কল সহ একটি ক্রিয়াকলাপের জন্য, আদেশের গ্যারান্টি দেওয়ার একমাত্র উপায় হ'ল অ্যাসিঙ্ক কলটি সম্পূর্ণ হওয়ার সময় নিরীক্ষণ করা এবং সেই স্থিতিটি সনাক্ত হওয়ার পরে তৃতীয় ফাংশনটি কল করা।
জাভাস্ক্রিপ্ট থ্রেডের আলোচনার জন্য, দেখুন: https://medium.com/@francesco_rizzi/javascript-main-thread-dissected-43c85fce7e23 এবং https://developer.mozilla.org/en-US/docs/Web/JavaScript/ EventLoop
এছাড়াও, এই বিষয়ে আরও একটি অনুরূপ, উচ্চ রেটযুক্ত প্রশ্ন: আমি একের পর এক তাদের সম্পাদন করার জন্য 3 টি ফাংশন কীভাবে কল করব?
firstFunction
ঠিক কী করে যা এটি অবিচ্ছিন্ন করে তোলে? যে কোনও উপায়ে - প্রতিশ্রুতি সম্পর্কে পরীক্ষা করুন