我写了这个函数来从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)
,所以为什么(以及如何)上面的函数仍然有效 - 我从一个函数返回一个对象承诺预期的功能?
答案 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>