2017-04-19 71 views
-1

好的,这里应该是一些简单的Typescript代码。无论如何,在我看来......从Typescript承诺返回字符串值

public showDialog(theNickname: string): string {   
     var req = { 
      method: 'POST', 
      url: '/Q/GetUserDetails', 
      data: { nickname: theNickname } 
     } 
     this.$http(req).then((response) => { 

      var c = "Nickname: " + response.data.Nickname + "<br/>"; 
      c = c + "Score: " + response.data.Score + "<br/>"; 
      c = c + "Followers: " + response.data.Followers + "<br/>";    
      return c;    

     }); 

    } 

当然,它没有返回字符串值,因为它是作为承诺返回。我不想使用超时功能。我怎样才能返回字符串值?它在html上被一个Angular函数调用。如果我改变

public showDialog(theNickname: string): string { 

public showDialog(theNickname: string): any { 

它仍然无法正常工作。我在UI.Bootstrap Popover中使用此代码。

谢谢!

回答

2

古答案是正确的,但你可能会更awesomer和使用异步/等待:

async function showDialog(theNickname: string): Promise<string> {   
     const req = { 
      method: 'POST', 
      url: '/Q/GetUserDetails', 
      data: { nickname: theNickname } 
     } 
     const response = await this.$http(req); 
     return `Nickname: ${response.data.Nickname 
      }<br/>Score: ${response.data.Score 
      }<br/>Followers: ${response.data.Followers}<br/>`; 
} 

async function caller() { 
    const message = await showDialog("TEST"); 
    alert(message); 
} 

检查出来here

+0

你使用'async' /'await'生产的前端应用?编译好的代码(使用promises)似乎很复杂...... – Paleo

+1

它可能看起来很复杂@paleo,但它在数学上证明是可行的。我用它在prod没有问题。 – Daryl