簡體   English   中英

TypeScript異步/等待

[英]TypeScript Async/Await

早上好!

我具有以下Angular / TypeScript服務,但是函數的查詢部分是異步發生的,因此在從服務器檢索數據之前將執行return語句。 有沒有一種方法可以向此函數添加異步/等待,以便在執行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);

使用$ 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);

然后,在我的控制器中,我可以直接將值設置為變量以在我的視圖中呈現。

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);

這將使我能夠訪問我的用戶屬性以及一些其他屬性,例如原始的Promise,因此我可以根據需要添加其他功能。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM