ห่อ 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 ที่น่าเกลียด:

โค้ด callback ดั้งเดิม (ไม่สวย)

Ewww.

โชคดีที่ Kotlin coroutines จัดเตรียม extension ให้ตรงกับสถานการณ์นี้: suspendCoroutine ฟังก์ชั่นนี้จะระงับ coroutine ปัจจุบันจนกว่างาน async จะเสร็จสมบูรณ์แล้วกลับมาทำงานอีกครั้งเมื่อผลลัพธ์พร้อม:

แปลงเป็นโค้ด coroutine (เซ็กซี่)

แน่นอน suspend funs สามารถเปิดใช้งานได้จาก CoroutineScope เท่านั้น หากคุณมองอย่างใกล้ชิดคุณจะเห็นว่าฉันสลับ setOnClickListener สำหรับ setOnClickCoroutine นี่คือคำจำกัดความ; เพิ่มไปยัง extension funs ของคุณ :)

ตั้งค่า click listeners ที่ระงับได้ (ด้วย extension นี้)

Dependencies

การอ่านและแหล่งข้อมูลเพิ่มเติม

ข้อมูลอ้างอิงและเครดิต

  1. Existing 3-function callback to Kotlin Coroutines (Roman Elizarov)
  2. Generic function to wrap callbacks with coroutines (rwhite226)
  3. 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.

--

--