Scala Future onComplete اور andThen کے افعال میں کیا فرق ہے؟
-
دونوں `andThen` اور `onComplete` آپ کو کال بیک فنکشن کے ذریعے مستقبل کے نتائج کا مشاہدہ کرنے کی اجازت دیتے ہیں۔ تاہم، `andThen` کو زنجیروں میں باندھا جا سکتا ہے، اور `onComplete` کے برعکس، یہ اس ترتیب کی ضمانت دیتا ہے جس میں کال بیک فنکشنز لاگو ہوں گے۔ اس کے علاوہ، `andThen` کو دیا جانے والا کال بیک ایک جزوی فنکشن ہو سکتا ہے، جو نتائج کے صرف ذیلی سیٹ کو ہینڈل کرتا ہے (جیسے، صرف `کامیابی` یا صرف `ناکامی`)۔   `andThen` اور `map` کا استعمال کرتے ہوئے درج ذیل مثال پر غور کریں:   ```  def demoAndThen(fut: Future[Int]): Future[Int] = {  fut.andThen { case Success(value) => println(s"andThen1: $value") }  .اور پھر { کیس Success(value) => println(s"andThen2: $value") }  .map { i =>  println(s"map: $i")  i  }  }  ```   جب ` fut` کامیابی سے مکمل ہوتا ہے، "andthen1: ..."، "andThen2: ..." اور "map: ..." اسی ترتیب سے پرنٹ کیا جائے گا۔   `onComplete` اور `map` کا استعمال کرتے ہوئے مشابہ مثال پر غور کریں:   ```  def demoOnComplete(fut: Future[Int]): Future[Int] = {  fut.onComplete { t: Try[Int] => println(s"onComplete1) : $t") }  fut.onComplete { t: Try[Int] => println(s"onComplete2: $t") }  fut.map { i =>  println(s"map: $i")  i  }  }  ` ``   اس صورت میں، جب `fut` کامیابی سے مکمل ہو جائے گا، "onComplete1: ...", "onComplete2: ..." اور "map: ..." کچھ غیر متعین ترتیب میں پرنٹ کیا جائے گا۔   اگرچہ `andThen` زنجیروں میں بند ہے، کال بیک فنکشن عام طور پر نتیجے میں آنے والے `Future` کے نتائج کو متاثر نہیں کرتا ہے۔ لیکن آگاہ رہیں: اگر کال بیک کچھ مہلک غلطیاں پھینکتا ہے، تو نتیجہ آنے والا مستقبل کبھی مکمل نہیں ہوگا۔