Ortak bir örüntü böyle bir şey yazmaktır:
await Promise.anyof($the-promise, Promise.in(10));
if $the-promise {
# it finished ahead of the timeout
}
else {
# it timed out
}
Bu kendini bir kırık olarak göstermez Promise
, ancak hepsi kötü değil (çünkü zaten birçok durumda iptal ile hatayı birbirinden ayırmanız gerekir, bu nedenle istisna türünde bazı eşleştirme yapmanız gerekir). Bu faktoring $the-promise
, tutma / kırma erişimine sahip olmanız gerekmeyen bir avantaja da sahiptir .
Birisi de böyle bir şeye sarılabilir:
class TimedOut is Exception {}
sub timeout($promise, $time) {
start {
await Promise.anyof($promise, Promise.in($time));
$promise ?? await($promise) !! die(TimedOut.new)
}
}
Bu yine herhangi biriyle çalışacak $promise
, sonucu veya istisnayı aktaracak ve aksi takdirde zaman aşımı istisnası atacaktır.
Tüm bunlara dikkat etmeniz gereken şey, devam etmekte olan işin iptalini gerçekten etkilememesidir. Bu önemli olmayabilir veya önemli olabilir. İkincisi ise, muhtemelen aşağıdakilerden birini isteyeceksiniz:
Promise
Yapılan iptal işlemlerini iletmek için kullandığınız A ; iptal ederken saklarsınız ve iptal işlemini gerçekleştirecek kodda anket yaparsınız
- Bunun
Supply
yerine, bir iptal modelinin bulunduğu (musluğu kapatarak) paradigmayı kullanmaya bakmak için .