না। আমরা এখনও এটি করতে পারি না।
ES6 প্রতিশ্রুতি বাতিল এখনও সমর্থন করে না । এটি চলছে, এবং এর নকশা এমন একটি জিনিস যা প্রচুর লোকেরা সত্যই কঠোর পরিশ্রম করেছিল। শব্দ বাতিলকরণ শব্দার্থ সঠিকভাবে পাওয়া শক্ত এবং এটি কাজ চলছে। "ফেচ" রেপোতে, এসডিস্কাসে এবং জিএইচ-তে বেশ কয়েকটি রেপো নিয়ে আকর্ষণীয় বিতর্ক রয়েছে তবে আমি আপনি থাকলে আমি কেবল ধৈর্য ধরতাম be
তবে, তবে, তবে .. বাতিল করা সত্যিই গুরুত্বপূর্ণ!
এটা, বিষয়টি বাস্তবতা বাতিলের হয় সত্যিই ক্লায়েন্ট-সাইড প্রোগ্রামিং গুরুত্বপূর্ণ দৃশ্যকল্প। ওয়েব অনুরোধগুলি বাতিল করার মতো বিবরণগুলি আপনার কাছে গুরুত্বপূর্ণ এবং সেগুলি সর্বত্র রয়েছে।
সুতরাং ... ভাষা আমাকে খারাপ!
হ্যাঁ, দুঃখিত। প্রতিশ্রুতিগুলি অন্যান্য জিনিসগুলি নির্দিষ্ট করার আগে প্রথমে প্রবেশ করতে হয়েছিল - সুতরাং তারা কোনও দরকারী জিনিস ছাড়াই প্রবেশ করেছিল .finally
এবং .cancel
- এটি ডিওএমের মাধ্যমে অনুমান করার পথে though বাতিল হয় না একটি অনুচিন্তা এটি শুধু একটি সময় বাধ্যতা এবং API নকশা আরো একটি পুনরাবৃত্ত প্রবেশপথ।
তাই আমি কি করতে পারি?
আপনার বেশ কয়েকটি বিকল্প রয়েছে:
- ব্লুবার্ডের মতো একটি তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করুন যিনি অনুমানের তুলনায় অনেক দ্রুত এগিয়ে যেতে পারেন এবং বাতিলকরণের পাশাপাশি আরও কিছু গুডিও করতে পারেন - হোয়াটসঅ্যাপের মতো বড় সংস্থাগুলি এটি করে।
- একটি বাতিলকরণ টোকেন পাস করুন ।
তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করা বেশ সুস্পষ্ট। একটি টোকেন হিসাবে, আপনি আপনার পদ্ধতিতে কোনও ফাংশন গ্রহণ করতে এবং তারপরে এটিকে কল করতে পারেন:
function getWithCancel(url, token) {
var xhr = new XMLHttpRequest;
xhr.open("GET", url);
return new Promise(function(resolve, reject) {
xhr.onload = function() { resolve(xhr.responseText); });
token.cancel = function() {
xhr.abort();
reject(new Error("Cancelled"));
};
xhr.onerror = reject;
});
};
যা আপনাকে করতে দেয়:
var token = {};
var promise = getWithCancel("/someUrl", token);
token.cancel();
আপনার আসল ব্যবহারের কেস - last
টোকেন পদ্ধতির সাথে এটি খুব কঠিন নয়:
function last(fn) {
var lastToken = { cancel: function(){} };
return function() {
lastToken.cancel();
var args = Array.prototype.slice.call(arguments);
args.push(lastToken);
return fn.apply(this, args);
};
}
যা আপনাকে করতে দেয়:
var synced = last(getWithCancel);
synced("/url1?q=a");
synced("/url1?q=ab");
synced("/url1?q=abc");
synced("/url1?q=abcd").then(function() {
});
এবং না, বেকন এবং আরএক্সের মতো লাইব্রেরিগুলি এখানে "জ্বলজ্বল করে না" কারণ তারা পর্যবেক্ষণযোগ্য লাইব্রেরি, তারা কেবল একই স্তরের ব্যবহারকারীর স্তরের প্রতিশ্রুতি গ্রন্থাগারগুলিতে নির্দিষ্ট সীমাবদ্ধ না হয়ে থাকে। আমার ধারণা, আমরা পর্যবেক্ষকরা দেশীয় হয়ে গেলে ES2016 এ অপেক্ষা করব এবং দেখব। তারা হয় Typeahead যদিও জন্য ছিমছাম।