从服务中存储和检索id

时间:2018-02-09 13:47:06

标签: angular

我想从我的数据库中获取currentStudentId后,将其存储在我的服务中,这样就可以通过调用getCurrentStudentId()从我的应用程序中的多个组件访问它。

我感到困惑,因为实际的学生对象(包含id)是作为我的数据库中的一个承诺返回的,我不知道如何转换它。我想做的是这个(服务):

currentStudentId: string;

getCurrentStudentId(): string {

    if( this.currentStudentId ) {
        console.log("Great, the id is already set. Let's simply return it!");
        return this.currentStudentId;
    }
    else {
        console.log("The id isn't set yet, so need to get the student from the db first");
        this.getStudentCurrent(); // I get the student from the db and return it as a promise

        // return ???
    }
    return ???
}

我的问题是我需要在此功能中返回什么内容?

1 个答案:

答案 0 :(得分:0)

经验法则是,如果函数中有异步调用,则使函数异步。因此,您需要将返回类型更改为Promise<string>,如此

getCurrentStudentId(): Promise<string> {
    if(this.currentStudentId) {
        return Promise.resolve(this.currentStudentId); // wrap cached value in promise
    }

    return this.getStudentCurrent()
       .then(currentStudent => {
            this.currentStudentId = currentStudent.id;
            return this.currentStudentId;
       });
}

或使用async/await

async getCurrentStudentId(): Promise<string> {
    if(this.currentStudentId) {
        return this.currentStudentId;
    }

    let currentStudent = await this.getStudentCurrent();
    this.currentStudentId = currentStudent.id;

    return this.currentStudentId;
}