2016-04-21 28 views
16

क्यू) मैं निम्नलिखित अवलोकन को एक वादे में कैसे परिवर्तित करूं ताकि मैं इसे .then(...) से कॉल कर सकूं?कोणीय 2: अवलोकन करने के लिए अवलोकन करने योग्य

मेरे विधि मैं एक वादा करने के लिए परिवर्तित करना चाहते हैं:

this._APIService.getAssetTypes().subscribe(
    assettypes => { 
     this._LocalStorageService.setAssetTypes(assettypes); 
    }, 
    err => { 
     this._LogService.error(JSON.stringify(err)) 
    }, 
    () => {} 
); 

सेवा विधि यह कहता है:

getAssetTypes() { 
    var method = "assettype"; 
    var url = this.apiBaseUrl + method; 

    return this._http.get(url, {}) 
     .map(res => <AssetType[]>res.json()) 
     .map((assettypes) => { 
     assettypes.forEach((assettypes) => { 
      // do anything here you might need.... 
     }); 
     return assettypes; 
    });  
    } 

धन्यवाद!

उत्तर

37
import 'rxjs/add/operator/toPromise'; 
import 'rxjs/add/operator/map'; 

... 

this._APIService.getAssetTypes() 
.map(assettypes => { 
    this._LocalStorageService.setAssetTypes(assettypes); 
}) 
.toPromise() 
.catch(err => { 
    this._LogService.error(JSON.stringify(err)); 
}); 
+0

इस त्रुटि प्राप्त करें: [ts] प्रकार का तर्क '(संपत्ति प्रकार: कोई भी) => शून्य' प्रकार 'पैरामीटर कन्स्ट्रक्टर' के पैरामीटर के लिए असाइन करने योग्य नहीं है। संपत्ति 'सब' प्रकार में गायब है '(संपत्ति प्रकार: कोई भी) => शून्य'। (पैरामीटर) संपत्ति प्रकार: कोई भी – Dave

+0

'getAssetTypes() 'वापसी क्या करता है? –

+0

इंटरफ़ेस प्रकार की एक सरणी एसेट टाइप – Dave

7

आप न वास्तव में यह करने के लिए बस करो की आवश्यकता है ...

import 'rxjs/add/operator/first'; 


this.esQueryService.getDocuments$.first().subscribe(() => { 
     event.enableButtonsCallback(); 
     }, 
     (err: any) => console.error(err) 
    ); 
    this.getDocuments(query, false); 

पहले() सुनिश्चित करता है सदस्यता के ब्लॉक केवल एक बार कहा जाता है (जिसके बाद यह के रूप में यदि आप सदस्यता नहीं ली हो जाएगा), एक वादे के रूप में बिल्कुल वैसा ही तो()

+0

सही, वादे केवल तभी हल किया जाता है जब अवलोकन पूरा हो जाता है। फर्स्ट() या .take (1) का उपयोग यह सुनिश्चित करेगा कि यह पहली उत्सर्जन के बाद मामला है। –

3

नमूदार इस तरह वादा करने के लिए परिवर्तित किया जा सकता है:

let promise=observable.toPromise(); 
संबंधित मुद्दे