2017-05-11 8 views
5

मैं ऐसा वादा कैसे रद्द करूं जो अभी तक पूरा नहीं हुआ है या अस्वीकार कर दिया गया है?PromiseKit एक वादा रद्द करें

वादा रद्द करने के बारे में वाइमिसकिट वार्ता के लिए प्रलेखन, लेकिन मुझे यह कैसे करना है इसका एक विशिष्ट उदाहरण नहीं मिल रहा है।

को देखते हुए:

currentOperation = client.load(skip: skip, query: nil) 
currentOperation!.then { (items) in 
    self.processItems(items: items, skip: skip, query: query) 
}.catch { (error) in 
    print("failed to load items - just retrying") 
    self.loadIfNeeded(skip: skip, query: query, onlyInStock: onlyInStock) 
} 

तो क्वेरी परिवर्तन (उपयोगकर्ता खोज पट्टी में कुछ पाठ में प्रवेश करती है) मैं रद्द करने और currentOperation त्यागें, एक नया वादा शुरू करने के लिए चाहते हैं।

+0

वादा श्रृंखला रद्द करने के बारे में Promisekit GitHub पृष्ठ पर एक धागा है: यहाँ एक न्यूनतम कार्यान्वयन है। क्या आपने [यहां] जांच की है (https://github.com/mxcl/PromiseKit/issues/339)? – ridvankucuk

+0

मैं देखता हूं, धन्यवाद @ridvankucuk। मैं देख सकता हूं कि यह शुरुआती रूप से सोचा जितना छोटा नहीं है। –

+0

इस तरह की नौकरी के लिए आपको आरएक्सस्विफ्ट, रीएक्टिवकिट, इंटरस्टेलर या अन्य प्रतिक्रियाशील एसडीके में से एक को देखने के लिए बेहतर सेवा दी जाएगी। –

उत्तर

1

एक वादा रद्द करने के लिए आपको किसी भी त्रुटि प्रकार से इसे अस्वीकार करना होगा जो CancellableError प्रोटोकॉल के अनुरूप है। इस तरह policy पैरामीटर allErrorsExceptCancellation पर सेट कैप्चर ब्लॉक त्रुटि को पार करने देगा।

यदि आपको एक रद्द करने योग्य समझौता की आवश्यकता है तो आप वादा कर सकते हैं और एक रद्द() फ़ंक्शन लागू कर सकते हैं जो कॉल किए जाने पर CancellableError से अस्वीकार कर देगा।

https://gist.github.com/EfraimB/918eebdf7dd020801c72da1289c8d797

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