funktsiyasi readFilePromise ( yo'l : string ) : Va'da < string > {
qaytish yangi Va'da (( hal qilish , rad etish ) => { readFile ( yo'l , ( xato , natija ) = > {
agar ( xato ) { rad etish ( xato )
} else { hal qilish ( natija )
}
})
})
}
rezolyutsiya parametrining turi biz foydalanayotgan aniq APIga bog‘liq (bu holda uning parametr turi natija turi qanday bo‘lishidan qat’iy nazar bo‘ladi) va rad etish parametri har doim xatoning bir turi bo‘ladi. . Amalga oshirishimizga qaytsak, xavfli funksiya turlarini aniqroq turlarga almashtirish orqali kodimizni yangilaymiz :
turi Ijrochi < T , E uzaytiradi Xato > = ( hal qilish : ( natija : T ) => bekor qilish , rad etish : ( xato : E ) => bekor ) => bekor // ...
va'daga qarab (masalan, Promise asinxron vazifani ifodalaydi va natijada raqam ) , biz va'daning qaysi turini hal qilishini tushunishni xohlaymiz . va uning tip parametrlarini konstruktoridagi Ijrochi turiga o'tkazing :
// ... sinf Va'da < T , E uzaytiradi Xato > { konstruktor ( f : Ijrochi < T , E > ) {} }
Hozirgacha juda yaxshi. Biz Promise ning konstruktor API-ni aniqladik va o'yindagi turlar nima ekanligini tushundik. Endi keling, zanjirlash haqida o'ylab ko'raylik - biz va'dalar ketma-ketligini bajarish , ularning natijalarini targ'ib qilish va istisnolarini qo'lga kiritish uchun qanday operatsiyalarni ochib bermoqchimiz ? Agar siz ushbu bo'limning boshida dastlabki kod misoliga qaytsangiz, u holda va catch aynan shu narsa uchun mo'ljallangan. Keling, ularni Promise turiga qo'shamiz :
// ... sinf Va'da < T , E uzaytiradi Xato > { konstruktor ( f : Ijrochi < T , E > ) {}
keyin < U , F uzaytiradi Xato > ( g : ( natija : T ) => Va'da < U , F > ) : < U , F > va'da qiling ushlang < U , F uzaytiradi Xato > ( g : ( xato : E ) => Va'da < U , F > ) : So'ngra < U , F > } va'da qiling va ushlang va'dalarni ketma - ketlashtirishning ikki yo'li : keyin va'daning muvaffaqiyatli natijasini yangi va'daga ko'rsatadi va 38catch xatoni yangi va'daga solishtirib, rad etishdan tiklanadi .
Keyin foydalanish quyidagicha ko'rinadi:
Do'stlaringiz bilan baham: |