एक सामान्य पैटर्न कुछ इस तरह से लिखना है:
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
, परिणाम या अपवाद पर पारित करेगा, और अन्यथा समयबद्ध अपवाद को फेंक देगा।
इन सभी को ध्यान में रखने वाली बात यह है कि वे वास्तव में प्रगति में काम को रद्द करने पर कोई प्रभाव नहीं डालते हैं। यह महत्वपूर्ण नहीं है, या यह महत्वपूर्ण हो सकता है। यदि बाद वाला, आप शायद चाहते हैं:
- एक है
Promise
कि आप रद्द जगह लेने के लिए उपयोग करने के लिए; आप इसे रद्द करते समय रखते हैं, और इसे उस कोड में प्रदूषित करते हैं जो रद्द कर देगा
- इसके
Supply
बजाय प्रतिमान का उपयोग करने के लिए, जहां एक रद्दीकरण मॉडल (नल को बंद करना) है।