2016-07-07 17 views
5

में एक ऑनलोड वादा कैसे परिवर्तित कर सकता हूं मेरे पास निम्न टाइपस्क्रिप्ट है जिसे मैं async/await पर उपयोग करना चाहता हूं। लेकिन मैं इसे अपने सिर में कैसे हल करना प्रतीत नहीं कर सकता।मैं Async/Await

private getWorkbookFromFile2(excelFile: File): Promise<xlsx.IWorkBook> { 
    var loadedPromise = new Promise<xlsx.IWorkBook>((resolve, reject) => { 
     var reader = new FileReader(); 

     reader.onload = (event: any) => { 
      var data = event.target.result; 

      var workbook = xlsx.read(data, { type: 'binary' }); 

      console.log(workbook.SheetNames); 
      resolve(workbook); 
     }; 
     reader.readAsBinaryString(excelFile); 
    }); 

    return loadedPromise; 
} 

किसी ने मुझे दिखा सकते हैं कि कैसे इस टाइपप्रति वादा async/await

+0

https://www.typescriptlang.org/docs/release-notes/typescript-1.7.html –

उत्तर

12

टाइपप्रति उपयोग करने के लिए परिवर्तित किया जा सकता अब इंजन ES6 जेनरेटर, जैसे के लिए देशी समर्थन होती हैं, के अतुल्यकालिक कार्यों का समर्थन करता है नोड v4 और ऊपर। एसिंक्रोनस फ़ंक्शन एसिंक कीवर्ड के साथ उपसर्ग किए गए हैं; प्रतीक्षा करें जब तक एक एसिंक्रोनस फ़ंक्शन रिटर्न वादा पूरा नहीं हो जाता है और वादा किए गए वादे से मूल्य को अनचाहे करता है तब तक निष्पादन को निलंबित कर देता है। - Source

async function getWorkbookFromFile2(excelFile: File) { 
    return new Promise<xlsx.IWorkBook>((resolve, reject) => { 
     var reader = new FileReader(); 

     reader.onload = (event: any) => { 
      var data = event.target.result; 

      var workbook = xlsx.read(data, { type: 'binary' }); 

      console.log(workbook.SheetNames); 
      resolve(workbook); 
     }; 
     reader.readAsBinaryString(excelFile); 
    }); 
} 

उदाहरण की खपत:

async function caller() { 
    var workbook = await this.getWorkbookFromFile2(this.getFile()); 
    // The 'workbook' variable is an IWorkBook... 
} 
+0

तो वहाँ का उपयोग करने का इंतजार है कोई रास्ता नहीं है पाठक और 'अधिभार' पर? – Vaccano

+1

नहीं, इसकी आवश्यकता नहीं है क्योंकि यह आपके एसिंक्रोनस ऑपरेशन का निम्नतम स्तर है। वादा यह है कि जब आप 'ऑनलोड' 'हल' को आमंत्रित करते हैं तो आप इस फ़ंक्शन से वापस आ जाएंगे। क्या इसका कोई मतलब है? आप मूल रूप से सभी बॉयलरप्लेट कोड को खाने के लिए खाद्य श्रृंखला को हटा रहे हैं, ताकि इस फ़ंक्शन के कॉलर्स विरासत श्रृंखला API का उपयोग करने के बजाय बस 'प्रतीक्षा कर सकें। –

+0

@ डेविडपिन शायद एक उदाहरण दिखाएगा कि इस समारोह को 'अधिक प्रतीक्षा' के साथ कैसे उपयोग किया जा सकता है ताकि इसे और अधिक पूर्ण उदाहरण बनाया जा सके? –