ايش الفرق بين وظيفتي سكالا فيوتشر أون كومبليت و أند ثين؟
كلاهما `andThen` و `onComplete` يسمح لك بمراقبة نتيجة بعض المستقبل عن طريق وظيفة استدعاء. لكن، `andThen` يمكن ان يكون مقيد، وعلى عكس `onComplete`، هو يضمن الترتيب الذي سيتم فيه تطبيق وظائف الاستدعاء. وبالاضافه، المكالمة العائده لـ `andThen` ممكن تكون وظيفة جزئية، تتعامل فقط مع مجموعة فرعية من النتائج (مثلاً، فقط `نجاح` او فقط `فشل`).  فكر بالامثال التالي باستخدام `andThen` و `map`:  هَلْ هُوَ هَذَا؟ def demoAndThen(fut: Future[Int]): Future[Int] = { fut.andThen { الحالة نجاح (قيمة) => println (قيمة) } .andThen { الحالة نجاح ((قيمة) => println ((s"andThen2: $قيمة") } . { map i => println{"s"map: $i") أنا } } هَلْ هُوَ هَذَا؟  وكلما `fut` يكتمل بنجاح، "و بعدين1:... "، "و بعدين2:... " و "خريطة:... " سيقومون بطبعتهم بهذا الترتيب.  فكر بالنموذج المماثل باستخدام `onComplete` و `map`:  هَلْ هُوَ هَذَا؟ defdemoOnComplete(fut: Future[Int]): Future[Int] = { futonComplete { t: Try[Int] => println(s"onComplete1: $t") } futonComplete { t: Try[Int] => println(s"onComplete2: $t") } fut.map { i => println{"s"map: $i") أنا } } هَلْ هُوَ هَذَا؟  ففي هذه الحالة، عندما يكتمل ∀fut` بنجاح، "onComplete1:..."، "onComplete2:..." و "map:..." سيبدأون بالطباعة في ترتيب غير محدد.  بالرغم من ان `andThen` مقيد، لا تؤثر دالة الاستدعاء عادةً على نتيجة `Future` الناتجة. لكن انتبه: اذا المكالمة الراجعة تلقي بعض الاخطاء المميتة، المستقبل الناتج ما سيكمل ابدا.