繁体   English   中英

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

[英]Chaining static and non static method in javascript es6

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

静态方法的目的是用于建立策略模式的工厂方法,并根据哪个提供者处于活动状态来设置具有不同子类的类的策略属性。 最后,静态方法返回基类的实例。

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

// 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([...]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM