2017-03-13 123 views
1

我正在努力將observable轉換爲承諾。我知道,還有的toPromise()功能上的任何observable但是當我使用這個函數返回我ZonedAwarePromise與性能:Angular 2 - 可以承諾的承諾失敗

__zone_symbol_state: null__zone_symbol_value: Array[0]

此外,承諾的then部分永遠不會被解僱。

具體情況

我想發送的HTTP API請求,讀取文件,並返回其無極裏面的內容:

public getData(fileName: string): Promise<any> { 
    return new Promise((resolve, reject) => { 
     this.getHomeDirectory().then(homedir => { 
      const fullFileName = homedir + fileName; 
      const myApiRequest = "..." + fullFileName; 
      return this.http.get(myApiRequest) 
         .map(this.extractData) 
         .toPromise() 
         .catch(this.handleError); 
     }); 
    } 
} 

調用此承諾,像這樣:

const fileName = '...'; 
this.fileService.getData(fileName).then(content => { 
    console.log(content); // never gets fired! 
}); 

我已經嘗試過不同的變化,例如用resolve(...)或替換,現在我不知道如何正確地履行這個承諾,以獲得then部分的工作。

非常感謝您的幫助和意見!

+0

你檢查你的網絡選項卡,看到你實際接收什麼? 'Array [0]'會告訴我,你的請求/響應處理中有一些奇怪的事情:) – Alex

回答

0
new Promise回調,你必須解決

public getData(fileName: string): Promise<any> { 
    return new Promise((resolve, reject) => { 
     this.getHomeDirectory().then(homedir => { 
      const fullFileName = homedir + fileName; 
      const myApiRequest = "..." + fullFileName; 
      this.http.get(myApiRequest) 
         .map(this.extractData) 
         .catch(this.handleError) 
         .subsucribe(data => { 
          resolve(data) 
         }); 
     }); 
    } 
} 
+0

感謝您的回答,不幸的是,它似乎永遠不會得到解決。我不知道爲什麼,但顯然請求沒有迴應(甚至沒有錯誤)任何想法? – jlang