ES6+ JavaScript子类异步方法调用父类异步方法报错求助
子类异步方法调用父类异步方法的语法错误解决办法
嘿,我来帮你搞定这个问题!你遇到的SyntaxError其实是部分JavaScript运行环境对async函数里super调用的语法解析兼容问题,完全是可以实现子类异步方法调用父类异步方法的,只是写法需要调整下~
问题出在哪?
你的代码逻辑本身是符合ES2017+标准的,但早期的JS引擎(比如旧版Node.js、某些未及时更新的构建工具)在解析async方法里直接返回super.method()时,会误判super的位置不合法,从而抛出错误。
两种可行的解决写法
写法1:用await等待父类方法后返回
虽然父类异步方法本身返回Promise,直接返回也能得到同样的Promise,但加上await不仅能让语法更清晰,还能兼容更多旧环境:
class SuperClass { constructor(){} async method() { return; } } class ExtendClass extends SuperClass { constructor() { super(); } async method() { // 加上await即可绕过解析器的语法识别问题 return await super.method(); } }
写法2:先把父类方法调用赋值给变量再返回
如果不需要等待结果,只是想返回父类方法的Promise对象,也可以先把super.method()的结果存到变量里再返回,同样能解决语法报错:
class SuperClass { constructor(){} async method() { return; } } class ExtendClass extends SuperClass { constructor() { super(); } async method() { const parentPromise = super.method(); return parentPromise; } }
额外提示
如果你的项目还在使用较老的JS运行环境,建议升级到支持ES2017及以上的版本(比如Node.js 8+,现代浏览器),或者用Babel这类转译工具来处理语法兼容,这样后续写新语法时就不会再遇到这类奇怪的兼容问题啦~
内容的提问来源于stack exchange,提问作者zniwalla
相关产品推荐
相关产品推荐

