2014-06-17 123 views
1

我需要從一個Winjs承諾返回一個值,像這樣:Winjs承諾返回一個值

getString() { 
     var str: string; 
     new WinJS.Promise((completed, error) => { Test.getAString(completed, error); }) 
         .done((s: string) => str = s); 
     return str; 
    } 

問題是str的總是返回undefined,但S有一個值(即「測試」),這我進入調試模式。

在此先感謝幫助我。

回答

2

str變量未定義的原因是因爲它在履行承諾前返回。我假設Test.getAString是異步的。它需要一點時間才能完成。所以return str;在完成之前被執行。

解決此問題的一種方法是返回承諾,而不是在此處理done-函數,在獲取字符串時處理履行。

所以你喜歡的東西:

getString().then((s:string)=> do something with the string..); 

function getString(){ 
    return new WinJS.Promise((completed, error) => { 
     Test.getAString(completed, error); 
    }); 
} 
+0

我將不得不等待異步/等待執行。謝謝。 – Alphapage