Javascript 非返回异步方法

Javascript 非返回异步方法,javascript,typescript,asynchronous,async-await,Javascript,Typescript,Asynchronous,Async Await,我使用带有es2017的Typescript作为编译目标,使用Javascript新的async/await 我目前有以下代码从TS服务类(简化)获取一些数据: class-MyClass{ 公共静态异步初始化():承诺{ const data=wait this.getItems(); //做不相关的初始化工作 返回新承诺(()=>{}); } 私有静态异步getItems():承诺{ return wait Service.fetchData(); } } 班级服务{ 公共静态异步fetch

我使用带有es2017的Typescript作为编译目标,使用Javascript新的
async
/
await

我目前有以下代码从TS服务类(简化)获取一些数据:

class-MyClass{
公共静态异步初始化():承诺{
const data=wait this.getItems();
//做不相关的初始化工作
返回新承诺(()=>{});
}
私有静态异步getItems():承诺{
return wait Service.fetchData();
}
}
班级服务{
公共静态异步fetchData():承诺{
//执行XHR并返回承诺。
}
}
这是可行的,但是如果
MyClass::initialize()
没有返回任何内容,而不是返回
newpromise(()=>{})
然而,这似乎是不可能的,因为任何使用
Wait
的方法/函数必须标记为
async
,而任何标记为
async
的方法/函数必须返回一个
承诺


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

TypeScript中的异步函数确实需要声明为返回承诺,但实际上不需要从函数返回承诺。您只需从异步函数返回承诺值的类型,它将被包装在承诺中

因此,对于返回
承诺的异步函数,您可以只返回空返回或根本不返回

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;
    }
}
类项目
{
}
类MyClass
{
公共静态异步VoidAsyncWithReturn():承诺
{
返回;
}
公共静态异步VoidAsyncWithoutReturn():承诺
{
}
私有静态异步AsyncReturningValue():承诺
{
变量结果:项[]=新数组();
返回结果;
}
私有静态异步AsyncReturningPromise():Promise
{
var结果:Promise=newpromise(()=>{returnnewarray()});
返回结果;
}
}

“必须返回承诺”不适用于js。JavaScript
async
函数自动返回承诺,函数的返回值(不一定是承诺)解析调用函数时返回的承诺。Typescript不同吗?您不应该编写只有静态方法的
。改为使用对象文字。看看@Bergi为什么会这样?@Niek a
class
只应在需要实例化对象时使用。否则,它效率低下(而且令人困惑)。对象文本更简单。这给了我一个错误
异步函数或方法的返回类型必须是
MyClass::getItems()
Service::fetchData()
方法中的全局承诺类型。@Niek抱歉,我弄错了。我已经更正了答案。
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;
    }
}