मुख्य अंतर यह है onComplete
कॉलबैक कहा जाता हो जाता है, भले ही भविष्य एक विफलता साथ पूरा करता है, जबकि foreach
(और onSuccess
) कार्यों को केवल सफल परिणाम के मामले में बुलाया जाता है।
वास्तव में, onComplete
के पैरामीटर एक समारोह Try[T] => U
है: समारोह आप पास या तर्क के रूप में एक Success[T]
साथ बुलाया जाएगा यदि भविष्य सफल हुआ एक Failure
साथ अगर वहाँ एक अपवाद था:
val f = Future { ??? } // this future completes with a failure
// foreach only calls the callback if the future is successful
f.foreach(_ => thisWillNeverExecute())
// This will print "future failed" after the future completes
f.onComplete {
case Success(_) => println("future completed successfully")
case Failure(e) => println("future failed")
}
साथ ही, आपको उल्लिखित विधियों को कॉल करने के लिए कुछ भी जांचने की आवश्यकता नहीं है: onComplete
/onSuccess
/onFailure
/foreach
सभी कॉलबैक को शेड्यूल करते हैं जिसे अंतर्निहित ExecutionContext
पर कॉल किया जाता है, केवल आपके पास भविष्य में पूरा होने पर ही होता है।
isCompleted
झूठ बोलने पर भी आप उन्हें कॉल कर सकते हैं, भले ही भविष्य को सफलतापूर्वक पूरा हो या विफल हो जाए, जिस पर आपने चुना था।
के अपने हस्ताक्षर पर एक नजर है:
def onComplete[U](@f: Try[T] => U)(implicit executor: ExecutionContext): Unit
onComplete
लेता है एक Try[T] => U
समारोह: इस समारोह जब भविष्य पूरा करता implicit executor
पर निष्पादित किया जाएगा। तर्क या तो एक Success[T]
हो सकता है अगर भविष्य सफल हुआ या एक Failure
अगर भविष्य में विफल रहा है
def onFailure[U](pf: PartialFunction[Throwable, U])(implicit executor: ExecutionContext): Unit
onFailure
पैरामीटर PartialFunction
कि केवल implicit executor
पर निष्पादित किया जाता है, तो भविष्य में विफल रहता है है Throwable
के साथ pf
परिभाषित किया गया है। यह मूल रूप से कुछ Failure
एस से मिलान करने पर कॉल करने जैसा ही है, और वास्तव में यह मानक लाइब्रेरी में बिल्कुल लागू किया गया है।
def onSuccess[U](pf: PartialFunction[T, U])(implicit executor: ExecutionContext): Unit
onSuccess
पैरामीटर, संतुलित onFailure
के लिए, एक PartialFunction
कि केवल implicit executor
पर निष्पादित किया जाता है, तो भविष्य को सफलतापूर्वक पूरा और आपूर्ति PartialFunction
मूल्य के लिए परिभाषित किया गया है है।
def foreach[U](f: T => U)(implicit executor: ExecutionContext): Unit
foreach
मूल रूप से onSuccess
रूप में ही है, लेकिन यह एक कुल समारोह लेता है। इसका मतलब है कि f
हमेशा क्रियान्वित किया जाता है, तो भविष्य को सफलतापूर्वक पूरा
N.B .: 'onSuccess' और 'onFailure' 2.12 में बहिष्कृत कर दिया करने के लिए जा रहे हैं। मेरा सुझाव है कि
स्रोत
2016-04-23 07:35:11
परिवर्तनों से आप कैसे प्रभावित होंगे, यह जानने के लिए this series of posts by Viktor Klang पढ़ें, धन्यवाद, आपका उत्तर बहुत विस्तृत है। मैंने उससे बहुत कुछ सीखा। तो, इसका मतलब है कि 'foreach' 'success' के बराबर है। क्या वह सही है? – hminle
'foreach' 'onSuccess' का" कुल "संस्करण है। यदि आप कुल कार्य को 'ऑनसेफ' पर पास करते हैं तो वे लगभग बराबर हैं। दोनों 'foreach' और' onSuccess' 'को' पूर्ण 'के संदर्भ में लागू किया गया है, लेकिन यह 2.12 –
में बदल जाएगा धन्यवाद, मुझे मिल गया – hminle