2016-01-03 9 views
5

मैं प्यार करता हूँ कि कैसे स्केला सुरक्षित टाइप है नहीं है, लेकिन एक रनटाइम त्रुटि मैं में प्रदर्शन जारी रखनाकैसे सबसे अच्छा Future.filter विधेय को संभालने के लिए संतुष्ट प्रकार त्रुटियों

Future.filter predicate is not satisfied 

मैं कारण है कि मैं इस त्रुटि हो रही है देख सकते हैं, बस इस त्रुटि के आसपास सबसे अच्छा काम करने के तरीके के बारे में सलाह की तलाश करें और इसे शानदार तरीके से संभालें या शायद मैं यह गलत कर रहा हूं?

val r: Future[play.api.mvc.Result] = for { 
    account <- accountServer.get(...) 
    if account.isConfirmed 
    orders <- orderService.get(account, ...) 
} yield { 
    ... 
} 

खाते की पुष्टि नहीं की है, तो मैं उपरोक्त त्रुटि मिल जाएगा।

मैंने सोचा होगा कि फ़िल्टर विफल होने की संभावना है, इसलिए स्केल उपज वापसी मूल्य को एक विकल्प बना देगा। नहीं?

val orders = accountServer.get(...) 
          .flatMap { account => 
          if(account.isConfirmed) orderService.get(account, ...) 
          else Future.successful(Seq.empty) 
          } 
+0

कैसे यह एक विकल्प लौट सकते हैं, यदि आप घोषित (जीन Logeart के जवाब के रूप में है, लेकिन भीतर-समझ के लिए एक) परिणाम का परिणाम 'परिणाम' होना चाहिए? – Dima

+1

एक सार्थक त्रुटि उत्पन्न करने के लिए 'भविष्य 'को पुनर्प्राप्त करें। 'भविष्य' [परिणाम] 'नहीं होना चाहिए? –

+0

@ एम-जेड हां मैंने इसे भविष्य में धन्यवाद दिया। – Blankman

उत्तर

4

आप शायद एक सरल flatMap उपयोग करने के लिए है, जिसमें आप एक else मामले निर्दिष्ट कर सकते हैं चाहता हूँ मामला, इसलिए इस पर भरोसा करना असुरक्षित है (एक आई-गार्ड का उपयोग करके)। लेकिन अगर आप एक ही बात को प्राप्त करने के लिए एक के लिए-समझ के भीतर ऐसा कर सकते हैं:

val r: Future[play.api.mvc.Result] = for { 
    account <- accountServer.get(...) 
    orders <- if (account.isConfirmed) orderService.get(account, ...) 
      else Future.successful(Seq.empty) 
} yield { 
    ... 
} 

+0

लेकिन मैं इसे एक कॉम्प-कंप में संभालना चाहता हूं क्योंकि मैं वर्तमान में उनका उपयोग कर रहा हूं। या यह सिर्फ संभव नहीं है? – Blankman

7

filterFuture के लिए मतलब नहीं है के बाद से प्रकार प्रणाली क्या else के लिए वापस जाने के लिए पता नहीं होगा:

संबंधित मुद्दे

 संबंधित मुद्दे