2015-10-24 417 views
0

早上好!TypeScript異步/等待

我有以下Angular/TypeScript服務,但函數的查詢部分是異步發生的,所以在從服務器檢索數據之前執行return語句。有沒有辦法給這個函數添加async/await,以便在執行return語句之前等待將數據分配給Users變量?

interface IUserService { 
     getAll(): entities.IUser[]; 
    } 

    export class UserService implements IUserService { 
     static $inject: string[] = ['dataAccessService']; 
     constructor(private dataAccessService: dataAccess.DataAccessService<entities.IUser>) { 

     } 

     getAll(): app.domain.entities.IUser[] { 
      var users: app.domain.entities.IUser[]; 
      var userResource = this.dataAccessService.getDataResource('https://api.github.com/users'); 
      userResource.query((data: app.domain.entities.IUser[]) => { 
       users = data; 
      }); 

      return users; 
     } 
    } 

    angular 
     .module('domain') 
     .service('userService', 
        UserService); 
+0

你見過這個嗎?:http://stackoverflow.com/questions/32401741/async-await-simple-example-typescript – mentat

+0

有趣......謝謝!如果我正在使用模塊,我如何讓它們將該異步關鍵字嵌套到命名空間的每個IFFE層。我可能需要找到解決方法,直到TypeScript 2.0。 – BSmith

回答

0

使用$ resource,您可以直接將資源值直接設置爲變量,而不是在回調方法中設置變量。

interface IUserService { 
    getAll(): ng.resource.IResourceArray<ng.resource.IResource<IUser>>; 
} 

export class UserService implements IUserService { 
    static $inject: string[] = ['dataAccessService']; 
    constructor(private dataAccessService: dataAccess.DataAccessService<entities.IUser>) { 
     var userResource = this.dataAccessService.getDataResource('https://api.github.com/users'); 
    } 

    getAll(): ng.resource.IResourceArray<ng.resource.IResource<IUser>> { 
     return userResource.query(); 
    } 
} 

angular 
    .module('domain') 
    .service('userService', 
       UserService); 

然後在我的控制器I可以直接設置的值,以我的變量在我的視圖來呈現。

class UserController { 
    user: ng.resource.IResourceArray<ng.resource.IResource<IUser>>; 

    static $inject: string[] = ['UserService']; 
    contructor(private userService: IUserService) { 

    } 

    this.users = this.userService.GetAll(); 
} 

angular.module('app').controller('UserController', UserController); 

這將讓我進入我的用戶屬性以及像原來承諾的一些附加屬性,所以我可以添加額外的功能,如果我想。

希望能幫助任何有類似問題的人。