Hata Yönetimi
Başlık sırasında meydana gelen istisnalar Listr aracılığıyla dahili olarak işlenecektir. Görevlerden hataları fırlatabilir ve bunların başarısız olduğunu gösterebilir veya çalışmayı durdurabilirsiniz. Bu, Listr, Alt Görev veya Görev seviyesinde daha fazla özelleştirilebilir.
Hatalar, mevcut renderere göre terminalde görsel çıktı üretecek ve yapılandırmaya göre başarısız olan Görev ile de ilgilenecektir. — Daha fazla bilgi için aşağıdaki paragrafa bakabilirsiniz.
Eğer bir uygulama erken sona ermesi gerekiyorsa ve belirli bir görevi başarısız olarak işaretlemesi gerekiyorsa, sadece Error
örneğini fırlatmalısınız.
Varsayılan davranış, herhangi bir görevin başarısız olması durumunda kendini başarısız olarak kabul etmesi ve çıkış yapmasıdır. Bu davranış exitOnError
seçeneğiyle değiştirilebilir. Eğer exitOnError
değeri true
ise, karşılaşılan ilk hata fırlatılır ve bu hata Görev 'den başlayarak dışa yayılarak iletilir.
::: warning
Bir Error
her zaman JavaScript/Typescript Error
sınıfından genişletilmiş gerçek bir Error
türü olmalıdır.
:::
::: info Örnek
İlgili örnekleri burada bulabilirsiniz.
:::
Hata Fırlatma
Bir hata fırlatmak, mevcut Görev 'den herhangi bir sonraki işlemi durdurur ve Listr 'e dışa yayılır ve exitOnError
yapılandırmasına bağlı olarak, gelecek veya eş zamanlı görevler için yürütme yavaşça durdurulacaktır.
::: info
Hataları açıkça yakalayıp toplamanıza gerek yoktur, çünkü bunlar her zaman Listr tarafından toplanacaktır.
:::
::: warning
Hatanın fırlatılmasından sonra yürütmenin duracağına dikkat edin. Bu, herhangi bir eşzamanlı işlemi erken sona erdirebilir.
:::
:::
Toplanan Hatalar
Hata 'ların, tasks.error
dizisi içerisinde ana Listr görev listesinde toplandığını belirtir, burada tasks
Listr sınıfıdır. Bu seçenek, v6.0.0 itibarıyla isteğe bağlıdır.
exitOnError
gibi bazı hataları göz ardı etme seçenekleri veya belirli görevi task.retry
ile yeniden deneme yeteneğine sahip olduğundan, karşılaşılan hatalar yürütme sırasında yutulabilir. Bu yutulan hataları ele almak için, yürütmeyi durdurmamasına rağmen karşılaşılan tüm hatalar bu özellik aracılığıyla toplanır.
Modlar
Hata toplama için seçilebilecek üç mod vardır: false
, minimal
ve full
. Bu, anahtar collectErrors
ile Listr seçeneklerinde her Görev için ayarlanabilir. Varsayılan mod false
'dır çünkü bunun en az kullanılan işlevsellik olduğunu düşünüyorum ve bu nedenle bazı bellek tasarrufu sağlaması için en azından isteğe bağlı olmalıdır.
ListrError
oluşturma sürecinden kaynaklanan potansiyel bellek sızıntıları nedeniyle, önerilen mod minimal
dır; bu, yalnızca hatanın nerede meydana geldiği, ne zaman karşılaşıldığı ve error.message
'in ne olduğu bilgilerini toplayacaktır.
Tam hata bilgilerini ayrıntılı incelemek istiyorsanız, modu full
olarak ayarlayabilirsiniz. Bu aynı zamanda mevcut bağlamı ve görevi ListrError
'a klonlayacaktır.
Hata toplama işlemini tamamen devre dışı bırakmak için bunu false
olarak ayarlayabilirsiniz.
ListrError
ListrError
sınıfı varsayılan Error
'ı genişletir ve hatanın kaynağını ve nereden geldiği gibi bazı ek bilgileri barındırır; ayrıca yürütme sırasında sorunu daha fazla çözmek için donmuş bir bağlamı içerir.
ListrErrorTypes
Bir listr hatası, birçok sebepten kaynaklanabilir; bu nedenle, belirli bir hatanın neden meydana geldiğine dair daha iyi bir açıklama sağlamak için ListrError
içinde type
özelliği, enum biçiminde ListrErrorTypes
olarak bulunur.
Metodoloji
tasks.error
dizisinin sırası, karşılaşılan hataların sırasını temsil eder.
Hata toplama mekanizmasını basit ve öngörülebilir tutmak için, alt görevlerden gelen hataları da işlemeyi gerektirebilir.
Örneğin, aşağıdaki örnek belirli bir zihniyetle ilgili bazı şeyleri açıklığa kavuşturacaktır.
::: details Kod
<<< @../../examples/docs/task/error-handling/collection.ts
:::
::: details Çıktı
<<< @../../examples/docs/task/error-handling/collection.output.txt{bash}
:::
::: details Akış
- İlk hata, ilk görevden fırlatılacaktır.
exitOnError
, o bağlamdafalse
olduğu için,ListrError
tasks.errors
tarafından toplanır ve değer{ message: '1', type: ListrErrorTypes.HAS_FAILED_WITHOUT_ERROR }
olacaktır. - Ardından, iki alt görevi olan ikinci göreve geri dönecektir.
- Alt görevlerin ilk görevi başarısız olacağından ve o bağlamda
exitOnError
true
olarak ayarlandığı için, o alt görev başarısız olacak ve fırlatılacaktır.ListrError
,tasks.errors
'a eklenecek ve değeri{ message: '3', type: ListrErrorTypes.HAS_FAILED }
olacaktır. - Alt görev çöktüğü için, alt görevlerde gelecek görevleri yerine getirmeyecektir.
- Ana görev listesine geri döner ve listeden 3. görevi yerine getirecektir. İlk görev ile aynı davranışı göstererek,
ListrError
değeri{ message: '2', type: ListrErrorTypes.HAS_FAILED_WITHOUT_ERROR }
olacaktır.
:::