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