非返回异步方法

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.

有没有办法解决这个问题,或者有什么我根本没有掌握的东西?

Nin*_*rry 5

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)