从Promise-expected函数返回对象

时间:2017-10-11 00:54:31

标签: typescript ecmascript-6

我写了这个函数来从API中获取和缓存一些数据。

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函数返回一个Promise,例如:return Promise.resolve(MyService.items),所以为什么(以及如何)上面的函数仍然有效 - 我从一个函数返回一个对象承诺预期的功能?

1 个答案:

答案 0 :(得分:2)

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

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

  

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

强调我的。由于使用async关键字声明函数,该过程会自动发生。

此外,打字稿知道这一点,所以只要你返回一个符合Array<Category>的值,就会满足打字稿,因为它知道它会被自动包装成Promise<Array<Category>>。< / p>