JSHint 是不是支持异步/等待?

Posted

技术标签:

【中文标题】JSHint 是不是支持异步/等待?【英文标题】:Does JSHint support async/await?JSHint 是否支持异步/等待? 【发布时间】:2017-07-27 00:45:21 【问题描述】:

我将 JSHint 用于 javascript 项目(使用 Visual Studio 代码)。在这个项目中,我使用了 async / await,JSHint 将其突出显示为错误。

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

jshint 支持 async/await 了吗?如果有,如何开启?如果没有,是否有任何解决方法?

【问题讨论】:

可能只使用 ESLint! 【参考方案1】:

更新(2019 年 2 月):从 2.10.1 版本开始支持异步/等待。只需更新您的 .jshintrc 以使用 "esversion": 9。 (+信息:Version changelog)


更新(2018 年 7 月):Async/await 将随着 JsHint 2.10.0 的发布而到来。 +信息:https://github.com/jshint/jshint/pull/3273


JSHINT 开发社区认为:

JSHINT 应该首先支持所有 ES6 语法,然后再开始实现 ES7 功能。 异步函数仅处于阶段 1,因此语法可能会发生很大变化

JSHINT-ESNEXT(包)

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

作者@marcominetti使用官方JSHint 2.7 Master分支并介绍了这个ES7特性,取自Seb Vincent esnextnext分支。

检查Npm Package 和source in github

安装:$npm install -g jshint-esnext

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


JSHINT 忽略(指令)

建议的常见解决方法或缓解做法是使用 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 警告和错误 ;)

【讨论】:

感谢 Colix,这有帮助。但是现在(2018 年 4 月)呢? jshint 支持异步吗? 你是如何实际使用 jshint-esnext 的?安装后,你是否可以像jshint-esnext myscript.js 一样使用它?因为那对我不起作用。 要使用 JS 的最后一个特性,我建议使用 eslint 而不是 jshint。 如果您收到此错误:“'esversion' 和 'esnext' linting 选项的值不兼容”这是由于 esnext 已被弃用。所以从你的 jshint 文件中删除 esnext,你会很好的。来源:github.com/Microsoft/vscode-jshint/issues/49【参考方案2】:

jshint 支持 async/await 了吗?

不,截至 2017 年初还没有。

它似乎还不支持async/await。从事 jsHint 工作的人们已经决定不支持 async/await,直到标准处于后期阶段(显然之前因为在它们仍在变化时过早地支持事物而被烧毁) - 尽管已经存在实现(Babel,nodejs 等...... )。

如果您关注此jsHint open issue thread,截至 7 天和 11 天前的最近 cmets,它仍然是一个未解决的问题。

如果没有,有什么解决方法吗?

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

【讨论】:

【参考方案3】:

注意:按照“已接受的答案”中的建议使用分叉的 JSHINT-ESNEXT 包(NPM 和 github)需要设置“实验”选项。

/* experimental: [asyncawait] */

/* experimental: [asyncawait, asyncreqawait] */

详见源代码here。

【讨论】:

【参考方案4】:

OP 询问是否有任何解决方法。这是一个混乱,但我已经用“async /**/”和“await /**/”替换了我所有的“async”或“await”。然后一个快速脚本将它们交换为 '/*async*/' 和 '/*await*/' 允许我使用 jshint 进行检查。

它不漂亮,但它喂牛头犬。

【讨论】:

以上是关于JSHint 是不是支持异步/等待?的主要内容,如果未能解决你的问题,请参考以下文章

dottrace 异步等待支持不起作用

带有异步等待的节点 repl

在一种方法上同时使用等待/异步和线程是不是可行?

Javascript - 异步等待和获取 - 返回值,而不是承诺?

使用Task.Wait而不是等待异步编程

线性程序中的异步/等待与阻塞是不是会影响其他应用程序的性能?