JSHint支持async/await吗?

49

我正在使用JSHint来为JavaScript项目(与Visual Studio Code配合使用)进行检查。在该项目中,我使用async/await,但JSHint将其标记为错误。

我尝试设置jshint,但似乎“esversion”的最大版本是6。

JSHint现在是否支持async/await?如果支持,如何开启?如果不支持,是否有任何解决方法?


3
建议使用 ESLint 来进行代码检查! - 0xC0DED00D
4个回答

55

更新 (2019年2月): 版本2.10.1已支持Async/await。只需更新您的.jshintrc文件以使用"esversion": 9。(更多信息请参见:版本更改日志)


更新 (2018年7月): Async/await将随JsHint 2.10.0发布。 +info:https://github.com/jshint/jshint/pull/3273


JSHINT开发社区认为:

  • JSHINT在开始实现ES7功能之前,应先支持所有的ES6语法。
  • 异步函数仅处于第一阶段,因此语法可能会发生很大变化。

JSHINT-ESNEXT(软件包)

然而,有一个非官方JSHINT软件包,其中包含对await/async的实验性支持,称为JSHINT-ESNEXT

作者是@marcominetti,他使用了官方的JSHint 2.7 Master分支,并引入了此ES7功能,该功能取自Seb Vincent esnextnext分支。

请查看npm软件包源代码在github中

安装: $npm install -g jshint-esnext

目前(2017年7月),这是支持JSHINT中await/async的唯一可用方法。


JSHINT IGNORE (指令)

常见的解决方法或减轻方法是使用JSHINT忽略指令。

// Code here will be linted with JSHint.
/* jshint ignore:start */
// Code here will be ignored by JSHint.
/* jshint ignore:end */

或者:

ignoreThis(); // jshint ignore:line

就我个人而言,在我们的代码中有大量异步/等待引用时,我认为这种缓解实践很混乱且不可靠。但更加混乱和麻烦的是JSHINT的警告和错误 ;)


1
谢谢Colix,这很有帮助。但是现在(2018年4月)怎么样了?jshint支持异步吗? - antew
你如何实际使用 jshint-esnext?一旦安装完成,你应该像这样使用它 jshint-esnext myscript.js 吗?因为这对我不起作用。 - Jack M
1
为了使用JS的最新功能,我建议使用eslint而不是jshint。 - Thomas Champion
如果你遇到了这个错误:"Incompatible values for the 'esversion' and 'esnext' linting options",那么这是由于 esnext 已经被弃用了。因此,请从你的 jshint 文件中删除 esnext,然后问题就会解决了。来源:https://github.com/Microsoft/vscode-jshint/issues/49 - Logan Cundiff

14

jshint现在支持async/await吗?

截至2017年初,暂时还不支持。

看起来jshint目前还不支持async/await。jsHint的开发人员决定在标准到达后期阶段(之前他们支持某些特性太早了,导致这些特性还在变化中)再开始支持async/await - 尽管已经有实现(如Babel、nodejs等)。

如果您关注这个jsHint的开放问题主题,最近的评论也显示它仍然是一个未解决的问题,距今7天和11天。

如果不支持,有什么解决办法吗?

截至2017年7月,似乎有一个名为jshint-esnext的jsHint代码分支,它在此处支持async/await:https://www.npmjs.com/package/jshint-esnext


4
注意:使用分叉的JSHINT-ESNEXT包(NPMgithub)作为“已接受的答案”中建议的,需要设置“experimental”选项的包含。 /* experimental: [asyncawait] */ 或者 /* experimental: [asyncawait, asyncreqawait] */ 有关详细信息,请参见此处的源代码。

2

这位OP询问是否有任何解决办法。我采用了一个变通方法,用'async /**/'和'await /**/'替换了所有的'async'或'await'。然后用一个快速的脚本将它们交换成'/*async*/'和'/*await*/',以便在使用jshint检查时进行确认。

这并不完美,但是能达到目的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接