ห่อ Callbacks เช่น Coroutines (Kotlin/Android)
สลับ callback hell สำหรับ suspend สุดเซ็กซี่!
Available in: English, French, Thai
Kotlin coroutines จัดให้มีไวยากรณ์ที่กระชับและสง่างามสำหรับการรันงานพร้อมกันและ async ซึ่งแตกต่างจาก callbacks, suspend funs สามารถห่อและเชื่อมโยงเข้าด้วยกัน
…แต่ legacy component ของฉันมีเพียง callback interface เท่านั้น
Android DatePicker
และ TimePicker
dialogs เป็นกรณีเช่นนี้! เราแค่ต้องการค่าจากผู้ใช้ แต่เราไม่สามารถคืนค่านั้นโดยตรงเนื่องจาก picker ถูกเรียกใช้แบบอะซิงโครนัส ดังนั้นเราจึงติดอยู่กับ callbacks ที่น่าเกลียด:
Ewww.
โชคดีที่ Kotlin coroutines จัดเตรียม extension ให้ตรงกับสถานการณ์นี้: suspendCoroutine
ฟังก์ชั่นนี้จะระงับ coroutine ปัจจุบันจนกว่างาน async จะเสร็จสมบูรณ์แล้วกลับมาทำงานอีกครั้งเมื่อผลลัพธ์พร้อม:
แน่นอน suspend funs สามารถเปิดใช้งานได้จาก CoroutineScope
เท่านั้น หากคุณมองอย่างใกล้ชิดคุณจะเห็นว่าฉันสลับ setOnClickListener
สำหรับ setOnClickCoroutine
นี่คือคำจำกัดความ; เพิ่มไปยัง extension funs ของคุณ :)
Dependencies
การอ่านและแหล่งข้อมูลเพิ่มเติม
ข้อมูลอ้างอิงและเครดิต
- Existing 3-function callback to Kotlin Coroutines (Roman Elizarov)
- Generic function to wrap callbacks with coroutines (rwhite226)
- Android Architecture Components + Coroutines (Android Developers)
Voie Dev มากขึ้น?
Follow on VoieDev.com, Medium, Dev.to, YouTube, Facebook, Twitter.
This article is available in English, French, Thai.