2016-08-30 13 views
14

के साथ उचित वादा कैसे वापस करें, इसलिए मैं टाइपस्क्रिप्ट के साथ कोणीय 2 सीख रहा हूं।टाइपस्क्रिप्ट

मैं एक मॉकिंग सेवा लिखने के लिए एक बिंदु तक पहुंच रहा हूं (मुझे विश्वास है) अगर सेवा सफलतापूर्वक प्राप्त हो जाती है और कुछ भी होता है तो त्रुटि वापस लौटाता है।

मैंने कोड का पालन करने की कोशिश की है लेकिन ऐसा लगता है कि यह टाइपस्क्रिप्ट के लिए एक वाक्यविन्यास नहीं है।

कोड अपडेट किया गया:

saveMyClass(updatedMyClass: MyClass){ 
     //saving MyClass using http service 
     //return the saved MyClass or error 
     var savedMyClass : MyClass = someLogicThatReturnsTheSavedObject(updatedMyClass); 
     if(isSomeCondition) 
      return Promise.reject(new Error('No reason but to reject')); 
     else 
      return new Promise<MyClass>(resolve => {setTimeout(()=>resolve(savedMyClass),1500 )} ); 
    } 

लेकिन मेरे आश्चर्य करने के लिए, टाइपप्रति शिकायत की "नहीं सबसे अच्छा आम प्रकार वापसी भाव के बीच मौजूद है"।

सही कोड क्या होना चाहिए? ताकि मैं अपने घटक पर उपयोग कर सकूं ताकि उचित मायक्लास लौटाया जा सके और सेवा से मौजूद होने पर त्रुटि को प्रतिबिंबित किया जा सके।

धन्यवाद

+1

टाइपस्क्रिप्ट के साथ जावास्क्रिप्ट टैग न करें! टाइपस्क्रिप्ट शुद्ध जावास्क्रिप्ट नहीं है – Endless

+0

क्या आपने यह कोशिश की है? https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/es6-promise/es6-promise.d.ts –

+0

बचत मानते हुए MyClass एक फ़ंक्शन है यह फ़ंक्शन सेव करें MyClass (अपडेट किया गया MyClass: MyClass): any {.... यहां कोड ....} –

उत्तर

22

यह Promise निर्माता के अंदर एम्बेड पूरे समारोह शरीर के लिए एक अच्छा अभ्यास, होगा माना जाता है, इसलिए किसी भी त्रुटि होना चाहिए यह एक अस्वीकृति के लिए परिवर्तित किया जा। इस मामले में यह भी आपकी समस्या हल करता है मुझे विश्वास है।

saveMyClass(updatedMyClass: MyClass) { 
    return new Promise<Package>((resolve, reject) => { 
     //saving MyClass using http service 
     //return the saved MyClass or error 
     var savedPackage : Package = updatedPackage; 
     if (isSomeCondition) { 
      throw new Error('No reason but to reject'); 
     } 

     setTimeout(() => { 
      resolve(savedPackage); 
     }, 1500); 
    }); 
} 
+0

सेटटाइमआउट का उपयोग इस तरह की चीजों को नियंत्रित करने के लिए कभी नहीं किया जाना चाहिए, लेकिन चूंकि टाइपस्क्रिप्ट और जावास्क्रिप्ट मूल रूप से टूटा हुआ है, इसलिए आप यह भी कर सकते हैं कि यह कितना बेतुका है। – CarComp

+1

@CarComp यह कोड किसी भी अनावश्यक संशोधन के बिना ओपीएस प्रश्न का सीधा जवाब है। –

+0

अभी भी एक टाइमआउट पर भरोसा करने के लिए अच्छा अभ्यास नहीं है। – CarComp