وش الفرق بين وظائف سكالا فيوتشر أون كومبليت و أند ثن؟
كل من `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") } futonComplete { t: Try[Int] => println{"s"onComplete2: $t") } fut.map { i => println{"s"map: $i") انا   لا، لا، لا  في هذه الحالة، عندما يكتمل `fut` بنجاح، سيتم طباعة "onComplete1:..."، "onComplete2:..." و "map:..." في ترتيب غير محدد.  بالرغم من ان ∀andThen∀ مقيد، لكن وظيفة الاستدعاء لا تؤثر بشكل عام على نتيجة ∀Future∀ الناتجة. لكن احذروا: اذا رد المكالمة ارم بعض الاخطاء المميتة، فالمستقبل الناتج لن يكمل ابدا.