gpt4 book ai didi

javascript - javascript es6 中链接静态和非静态方法

转载 作者:行者123 更新时间:2023-12-01 00:39:53 25 4
gpt4 key购买 nike

当我链接的第一个函数是从同一类返回对象实例的静态方法时,如何链接某个类中的多个函数?

静态方法的目的是用于设置策略模式的工厂方法,并且根据哪个提供程序处于事件状态,它将设置具有不同子类的类的策略属性。最后静态方法返回基类的实例。

我有一个可行的解决方案,我首先调用静态方法并将对象实例保存在变量引用中。之后我调用另一个函数。我喜欢通过链接将代码压缩在一行中。

// Commented code works
// Provider is the base class
// getActiveProvider is the static method and return Provider class object instance
// findNumbersByIds is non static method
// const provider = await Provider.getActiveProvider();
// return await provider.findNumbersByIds([...]);

// This one not working
return await Provider.getActiveProvider().findNumbersByIds([...]);

我希望使用链接能够获得与不使用链接一样的正确结果。

BR,伊戈尔

最佳答案

TLDR:您缺少括号,因为 await 的优先级低于 .

问题不在于链接,问题在于您滥用了 await 语法。

这是一个示例,显示您使用静态和非静态方法进行链接的方式效果很好:

class X {
static create() {
console.log('created');
return new X();
}

y() {
console.log('y');
return this;
}
}

x = X.create().y().y();

下面的示例展示了当两种方法都是异步时如何正确执行相同操作:

class X {
static async create() {
console.log('created');
return new X();
}

async y() {
console.log('y');
return this;
}
}

let main = async () => {
x = await (await (await X.create()).y()).y();
};
main();

对于您的示例,要纠正语法,您只需添加一对括号:

return (await Provider.getActiveProvider()).findNumbersByIds([...]);

关于javascript - javascript es6 中链接静态和非静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57791112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com