我正在使用带有 es2017 作为编译目标的 Typescript,使用 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
.
有什么办法可以解决这个问题,还是有什么我根本没有掌握的?
最佳答案
TypeScript 中的异步函数确实需要声明为返回 promise ,但您实际上不需要从函数返回 promise 。您可以只从异步函数返回 promise 值的类型,它会被包装在 promise 中。
因此,对于返回 Promise<void>
的异步函数,您可以只返回一个空值或根本不返回。
class Item
{
}
class MyClass
{
public static async VoidAsyncWithReturn(): Promise<void>
{
return;
}
public static async VoidAsyncWithoutReturn(): Promise<void>
{
}
private static async AsyncReturningValue(): Promise<Item[]>
{
var result: Item[] = new Array();
return result;
}
private static async AsyncReturningPromise(): Promise<Item[]>
{
var result: Promise<Item[]> = new Promise<Item[]>(() => { return new Array() });
return result;
}
}
关于javascript - 非返回异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48038468/