Nie*_*iek 3 javascript asynchronous async-await typescript
我使用 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.
}
}
Run Code Online (Sandbox Code Playgroud)
此作品,但它是有很多清洁,如果MyClass::initialize()不返回任何东西,而不是返回new Promise<void>(() => {});然而,这似乎是不可能的,因为任何方法/函数使用await 具有被标记async,并标有任何方法/函数async 有返回一个promise.
有没有办法解决这个问题,或者有什么我根本没有掌握的东西?
TypeScript 中的异步函数确实需要声明为返回承诺,但您实际上不需要从函数返回承诺。您可以只从 async 函数返回承诺值的类型,它会被包装在承诺中。
因此,对于返回 a 的异步函数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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2687 次 |
| 最近记录: |