javascript - 非返回异步方法

标签 javascript typescript asynchronous async-await

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

相关文章:

javascript - 单选按钮在 jquery 弹出框中不起作用

javascript - 网络音频 : How to deactivate microphone

typescript - Typescript d.ts 中的函数对象

html - 如何修复未定义的 "ERROR TypeError: Cannot set property ' id'

java - 服务器崩溃/关闭后恢复 Async ThreadPoolTask​​executor

javascript - 带等待或不带返回之间有区别吗

javascript - 谷歌地图地理编码器未定义

Javascript 文本变体搜索

javascript - Nashorn 解析 TypeScript

javascript - 如何顺序调用多个异步javascript函数?