ما الفرق بين وظائف Scala Future onComplete و andThen؟
كلاهما `andThen` و `onComplete` يسمحون لك بمراقبة نتيجة بعض المستقبل عن طريق وظيفة الرد على المكالمة. ومع ذلك، يمكن لـ `andThen` أن تكون مسلسلة، وعلى عكس `onComplete`، فإنها تضمن الترتيب الذي سيتم فيه تطبيق وظائف الاستدعاء. وبالإضافة إلى ذلك، قد يكون النداء التالي لـ `andThen` وظيفة جزئية، وتتعامل فقط مع مجموعة فرعية من النتائج (على سبيل المثال، فقط `Success` أو فقط `Failure`).  فكر فالمثال اللي بعد باستخدام `andThen` و `map`:  ` ` ` def demoAndThen(fut: Future[Int]): Future[Int] = { fut.andThen { الحالة Success{\value} => println{\s"andThen1: $value") } .andThen {حالة النجاح ((قيمة) => println ((s"andThen2: $قيمة") } . {map i => println{"الخريطة: $i") أنا } } ` ` `  منين ينجح `fut`، "andthen1:..."، "andThen2:..." و "map:..." غادي يطبعو ف هاد الترتيب.  فكر فالمثال المماثل باستخدام `onComplete` و `map`:  ` ` ` defOnComplete{future: 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{"الخريطة: $i") أنا } } ` ` `  في هذه الحالة، عندما يكتمل `fut` بنجاح، "onComplete1:..."، "onComplete2:..." و "map:..." غادي يطبعوا في ترتيب غير محدد.  على الرغم من أن `andThen` متسلسلة، إلا أن وظيفة الاستدعاء لا تؤثر بشكل عام على نتيجة `Future` الناتجة. و لكن كن على علم: إذا كانت المكالمة الراجعية تسبب في بعض الأخطاء المميتة، فالمستقبل اللي نتج منه ما غاديش يكتمل.