একটি সাধারণ প্যাটার্নটি হ'ল এই জাতীয় কিছু লেখা:
await Promise.anyof($the-promise, Promise.in(10));
if $the-promise {
# it finished ahead of the timeout
}
else {
# it timed out
}
এটি কোনও ভাঙ্গা হিসাবে নিজেকে প্রকাশ করে না Promise
, যদিও এটি খুব খারাপ নয় (যেহেতু আপনাকে বাতিলকরণ বনাম পার্থক্য করতে হবে। যাইহোক অনেক ক্ষেত্রে ত্রুটি, তাই আপনাকে এখনও ব্যতিক্রম প্রকারের সাথে কিছু মিল রাখতে হবে)। এই ফ্যাক্টরিংয়ের এমন সুবিধাও রয়েছে $the-promise
যা আপনার কাছে রাখা / বিরতিতে অ্যাক্সেস থাকতে পারে এমনটি হওয়া উচিত নয়।
যে কেউ এ জাতীয় কিছুতে এটি গুটিয়ে রাখতে পারে:
class TimedOut is Exception {}
sub timeout($promise, $time) {
start {
await Promise.anyof($promise, Promise.in($time));
$promise ?? await($promise) !! die(TimedOut.new)
}
}
যা আবার কারও সাথে কাজ করবে $promise
, ফলাফল বা ব্যতিক্রমটি পাস করবে এবং সময়সাপেক্ষ ব্যতিক্রমকে নষ্ট করবে otherwise
এই সমস্তগুলির সাথে মাথায় রাখার বিষয়টি হ'ল তারা প্রকৃতপক্ষে কোনও কাজ বাতিল করার ক্ষেত্রে প্রভাব ফেলবে না। এটি গুরুত্বপূর্ণ নয়, বা এটি গুরুত্বপূর্ণ হতে পারে। যদি দ্বিতীয়টি হয় তবে আপনি সম্ভবত:
- একজন
Promise
যে আপনার বাতিলের বোঝাতে ব্যবহার সঞ্চালিত থাকার; বাতিল করার সময় আপনি এটি রাখেন, এবং কোডটি পোল করুন যা বাতিলকরণ করবে
Supply
পরিবর্তে দৃষ্টান্তটি ব্যবহার করার জন্য, যেখানে একটি বাতিলকরণ মডেল রয়েছে (ট্যাপটি বন্ধ করে দেওয়া হচ্ছে)।