非返回异步方法

问题描述 投票:2回答:1

我正在使用带有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

有什么方法可以解决这个问题,还是有什么东西我从根本上没有抓住?

javascript typescript asynchronous async-await
1个回答
3
投票

需要声明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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.