【发布时间】:2018-06-10 19:56:35
【问题描述】:
我使用的是Typescript,以es2017为编译目标,使用Javascript新的async/await。
我目前有以下代码从 TS 服务类(简化)中获取一些数据:
class MyClass {
public static async initialize(): Promise<void> {
const data = await this.getItems();
// do unrelated initialization stuff
return new Promise<void>(() => {});
}
private static async getItems(): Promise<Item[]> {
return await Service.fetchData();
}
}
class Service {
public static async fetchData(): Promise<Item[]> {
// Performs an XHR and returns a Promise.
}
}
这行得通,但是如果MyClass::initialize() 没有返回任何东西,而不是返回new Promise<void>(() => {});,它会干净得多。但是,这似乎是不可能的,因为任何使用await 的方法/函数都有 标记为async,并且任何标记为async 的方法/函数必须返回promise。
有什么办法可以解决这个问题,还是有什么我根本没有掌握的东西?
【问题讨论】:
-
“必须返回一个承诺”不适用于 js。 JavaScript
async函数自动返回一个promise,函数的返回值(不一定是promise)解析调用函数时返回的promise。 Typescript 有什么不同吗? -
你不应该写一个只有静态方法的
class。请改用对象字面量。 -
@Bergi 为什么会这样?
-
@Niek A
class应该只用于需要实例化对象的情况。否则效率低下(而且令人困惑)。对象字面量更简单。
标签: javascript typescript asynchronous async-await