ما الفرق بين وظائف Scala Future onComplete و andThen؟
كل من `andThen` و `onComplete` يسمح لك بمراقبة نتيجة بعض المستقبل عبر وظيفة استدعاء. ومع ذلك، يمكن أن تكون ∀andThen∀ مقيدة، وعلى عكس ∀onComplete`، فإنها تضمن الترتيب الذي سيتم فيه تطبيق وظائف الاستدعاء. بالإضافة إلى ذلك ، قد يكون استدعاء `andThen` وظيفة جزئية ، لا تتعامل إلا مع مجموعة فرعية من النتائج (على سبيل المثال ، فقط `Success` أو فقط `Failure`).  فكر في المثال التالي باستخدام `andThen` و `map`:  ` ` ` def demoAndThen ((المستقبل: المستقبل[Int]): المستقبل[Int] = { fut.andThen { الحالة النجاح (قيمة) => println (قيمة) } .andThen { الحالة النجاح ((قيمة) => println ((s"andThen2: $قيمة") } . { map i => ({\pos (190,230) }) أنا } } ` ` `  عندما ينجح `fut`، سيتم طباعة "andthen1:..."، "andThen2:..." و "map:..." في هذا الترتيب.  فكر في المثال المماثل باستخدام `onComplete` و `map`:  ` ` ` def demoOnComplete ((المستقبل: المستقبل[Int]): المستقبل[Int] = { futonComplete { t: Try[Int] => println{"s"onComplete1: $t") } futonComplete { t: Try[Int] => println{"s"onComplete2: $t") } (فوتماب) ({\pos (190,230) }) أنا } } ` ` `  في هذه الحالة ، عندما يكتمل `fut` بنجاح ، سيتم طباعة "onComplete1:..." و "onComplete2:..." و "map:..." في ترتيب غير محدد.  على الرغم من أن `andThen` مُسلسلة، إلا أن وظيفة الاستدعاء لا تؤثر بشكل عام على نتيجة `Future` الناتجة. ولكن كن على علم: إذا كان استدعاء التراجع يلقي بعض الأخطاء المميتة، المستقبل الناتج لن تكتمل أبدا.