Programming TypeScript


Download 1.81 Mb.
bet154/206
Sana01.11.2023
Hajmi1.81 Mb.
#1737990
1   ...   150   151   152   153   154   155   156   157   ...   206
Bog'liq
Boris Cherny Programming TypeScript Making Your JavaScript Applications (1)

qaytish bu . emitent . yoqilgan ( kanal , tinglovchi )
}
}
SafeEmitter umumiy turdagi Hodisalarni e'lon qiladi , Xususiyatlar kalitidan (yaroqli ob'yekt kalitlari uchun TypeScript-ning o'rnatilgan turi: string , number yoki Symbol ) parametrlar ro'yxatiga yozishni e'lon qiladi.
Biz emitentni SafeEmitter -da shaxsiy a'zo sifatida e'lon qilamiz . Biz buni SafeEmitter-ni kengaytirish o'rniga qilamiz, chunki emit va yoqish uchun imzolarimiz EventEmitter -dagi haddan tashqari yuklangan hamkasblariga qaraganda ancha cheklangan va funksiyalar o'z parametrlarida qarama-qarshi bo'lganligi sababli (esda tutingki, a funktsiyasi boshqa funktsiyaga tayinlanishi uchun b uning parametrlari shunday bo'lishi kerak). b ) TypeScript bu ortiqcha yuklarni e'lon qilishga ruxsat bermaydi.
emit biz Hodisalar turida aniqlagan parametrlar ro'yxatiga mos keladigan kanal va argumentlarni oladi .
Xuddi shunday, on kanal va tinglovchini oladi . tinglovchi biz Voqealar turida belgilagan parametrlar ro'yxatiga mos keladigan o'zgaruvchan sonli argumentlarni oladi .
Biz SafeEmitter- dan tinglash qatlamini xavfsiz amalga oshirish uchun zarur bo'lgan qozonni keskin qisqartirish uchun foydalanishimiz mumkin. Ishchi tomonda biz barcha xabarlar qo'ng'iroqlarini emitentimizga topshiramiz va iste'molchilarga qulay va xavfsiz tinglovchi API-ni taqdim etamiz:
// WorkerScript.ts turi Buyruqlar = {
sendMessageToThread : [ ThreadID , Xabar ]
createThread : [ Ishtirokchilar ] addUserToThread : [ ThreadID , UserID ] removeUserFromThread : [ ThreadID , UserID ] }
turi Voqealar = {
acceptMessage : [ ThreadID , UserID , Message ] createdThread : [ ThreadID , ishtirokchilar ] addedUserToThread : [ ThreadID , UserID ] removeUserFromThread : [ ThreadID , UserID ] }
// Asosiy mavzudan keladigan voqealarni tinglang buyruq beruvchi = yangi SafeEmitter < Buyruqlar > ()
// Voqealarni asosiy oqimga qaytaring let voqea beruvchi = yangi SafeEmitter < Voqealar > ()
// Asosiy mavzudan kiruvchi buyruqlarni o'rash
// bizning typesafe hodisa emitentimiz yordamida
xabar = buyruq => buyruq beruvchi . chiqarish ( buyruq . maʼlumotlar . turi , ... buyrugʻi . maʼlumotlar . maʼlumotlar
)
// Ishchi tomonidan chiqarilgan voqealarni tinglang va ularni asosiy mavzuga yuboring
voqea emitter . on ( 'receivedMessage' , ma'lumotlar => postMessage ({ turi : 'receivedMessage' , ma'lumotlar })
)
voqea emitter . on ( 'createdThread' , ma'lumotlar => postMessage ({ turi : 'createdThread' , ma'lumotlar }) ) // va hokazo.
// SendMessageToThread buyrug'iga asosiy ip buyrug'idan javob berishEmitter . yoqilgan ( 'sendMessageToThread' , ( threadID , xabar ) => konsol . jurnal ( OK , men bo'ladi yuborish a xabar uchun threadID $ { threadID }))
// Voqeani asosiy mavzuga qaytaring eventEmitter . emit ( 'createdThread' , 123 , [ 456 , 789 ])
Boshqa tomondan, buyruqlarni asosiy ipdan ishchi ipga yuborish uchun EventEmitter- ga asoslangan API-dan ham foydalanishimiz mumkin. Shuni esda tutingki, agar siz ushbu naqshni o'z kodingizda ishlatsangiz, joker belgilar tinglovchilarini qo'llab-quvvatlaydigan to'liq xususiyatli emitentdan (masalan, Paolo Fragomenining ajoyib EventEmitter2 ) foydalanishni ko'rib chiqishingiz mumkin, shuning uchun har bir hodisa turi uchun tinglovchini qo'lda qo'shishingiz shart emas. :
// MainThread.ts turi Buyruqlar = {
sendMessageToThread : [ ThreadID , Xabar ]
createThread : [ Ishtirokchilar ] addUserToThread : [ ThreadID , UserID ] removeUserFromThread : [ ThreadID , UserID ] }
turi Voqealar = {
acceptMessage : [ ThreadID , UserID , Message ] createdThread : [ ThreadID , ishtirokchilar ] addedUserToThread : [ ThreadID , UserID ] removeUserFromThread : [ ThreadID , UserID ] }

Download 1.81 Mb.

Do'stlaringiz bilan baham:
1   ...   150   151   152   153   154   155   156   157   ...   206




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling