2017-10-11 99 views
0

我写了这个函数来从API获取和缓存一些数据。从Promise预期函数返回对象

export class MyService { 
    static items: Array<Post> = null; 

    async getItems(): Promise<Array<Post>> { 
    if (MyService.items) { 
     return MyService.items; 
    } 
    else { 
     return this.doRequest();  
    } 
    } 

    private async doRequest: Promise<Array<Post>> { 
    // get items from API. 
    } 
} 

据我所知,我必须从getItems功能,像返回一个承诺:return Promise.resolve(MyService.items),为什么(以及如何)以上功能仍能正常工作 - 我从无极预期函数返回一个对象?

回答

2

任何以async关键字开头的函数都会自动将其返回值包含在承诺中。没有必要手动使用Promise.resolve()等,尽管这样做也非常好。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

当异步函数被调用,它返回一个承诺。 当异步函数返回一个值时,Promise将用返回的值解析。当异步函数抛出异常或某个值时,Promise将被抛出的值拒绝。

强调我的。该过程由于使用关键字async声明功能而自动发生。

此外,typescript意识到这一点,所以只要您返回的值符合Array<Category>,typecript就会满足,因为它知道它将自动包装到Promise<Array<Category>>中。