 Scala Future onComplete සහ andThen functions අතර වෙනස කුමක්ද?
'andThen' සහ 'onComplete' යන දෙකම ඔබට ආපසු කැඳවීමේ ශ්‍රිතයක් හරහා යම් අනාගතයක ප්‍රතිඵල නිරීක්ෂණය කිරීමට ඉඩ සලසයි. කෙසේ වෙතත්, `andThen` දම්වැල් කළ හැකි අතර, `onComplete` මෙන් නොව, එය ආපසු කැඳවීමේ කාර්යයන් යෙදෙන අනුපිළිවෙල සහතික කරයි. ඊට අමතරව, 'andThen' වෙත ලබා දී ඇති ආපසු කැඳවීම අර්ධ ශ්‍රිතයක් විය හැක, ප්‍රතිඵලවල උප කුලකයක් පමණක් හසුරුවයි (උදා, "සාර්ථකත්වය" හෝ "අසාර්ථක" පමණි). `andThen` සහ `map` භාවිතයෙන් පහත උදාහරණය සලකා බලන්න: ``` def demoAndThen(fut: Future[Int]): Future[Int] = {fut.andThen {case Success(value) => println(s"andThen1: $value") } .සහ පසුව { case Success(value) => println(s"andThen2: $value") } .map { i => println(s"map: $i") i } } ``` විට ` fut` සාර්ථකව සම්පූර්ණ කරයි, "andthen1: ...", "andThen2: ..." සහ "සිතියම: ..." එම අනුපිළිවෙලින් මුද්‍රණය කෙරේ. `onComplete` සහ `map` භාවිතයෙන් සමාන උදාහරණය සලකා බලන්න: ``` def demoOnComplete(fut: Future[Int]): Future[Int] = {fut.onComplete {t: Try[Int] => println(s"onComplete1 : $t") } fut.onComplete {t: උත්සාහ කරන්න[Int] => println(s"onComplete2: $t") } fut.map { i => println(s"map: $i") i } } ` `` මෙම අවස්ථාවේදී, `fut` සාර්ථකව සම්පූර්ණ වූ විට, "onComplete1: ...", "onComplete2: ..." සහ "සිතියම: ..." යම් නිශ්චිත නොවන අනුපිළිවෙලකින් මුද්‍රණය කෙරේ. `andThen` දම්වැලකින් බැඳී ඇතත්, ආපසු කැඳවීමේ කාර්යය සාමාන්‍යයෙන් ලැබෙන `අනාගතයේ` ප්‍රතිඵලයට බලපාන්නේ නැත. නමුත් මතක තබා ගන්න: ආපසු කැඳවීම මාරාන්තික දෝෂ ඇති කරයි නම්, එහි ප්‍රතිඵලය වන අනාගතය කිසිදා සම්පූර්ණ නොවනු ඇත.