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