web-dev-qa-db-fra.com

Est-ce que JSHint prend en charge async/wait?

J'utilise JSHint pour le projet JavaScript (avec le code Visual Studio). Et dans ce projet, j’utilise async/wait, que JSHint met en évidence comme des erreurs.

J'ai essayé de mettre en place jshint, mais il semble que la version maximale de "esversion" soit 6.

Est-ce que jshint supporte async/attend déjà? Si c'est le cas, comment l'allumer? Et si non, existe-t-il des solutions de contournement? 

35
Alena Gilevskaya

Update (février 2019): Async/wait sont désormais pris en charge à partir de la version 2.10.1. Mettez simplement à jour votre fichier .jshintrc pour utiliser "esversion": 9. (+ Info: Version changelog )


Mise à jour (juillet 2018): Async/wait arrivera avec la publication de JsHint 2.10.0. + info: https://github.com/jshint/jshint/pull/3273


La communauté en développement de JSHINT considère que:

  • JSHINT doit d’abord prendre en charge toute la syntaxe de l’ES6 avant de commencer à mettre en œuvre les fonctionnalités de l’ES7.
  • Les fonctions asynchrones ne sont qu'au stade 1, la syntaxe peut donc beaucoup changer

JSHINT-ESNEXT (PACKAGE)

Cependant, il existe un package JSHINT unnoficial, qui contient support expérimental pour wait/async, appelé JSHINT-ESNEXT.

L'auteur, @ marcominetti , a utilisé la branche officielle de JSHint 2.7 et a présenté cette fonctionnalité ES7, tirée de Seb Vincent esnextnext .

Vérifiez le paquet Npm , et le source dans github

Installation: $ npm install -g jshint-esnext

Pour l'instant (juillet 2017), il s'agit de la seule approche décente disponible pour prendre en charge wait/async dans JSHINT.


JSHINT IGNORE (DIRECTIVE)

Une solution de contournement ou d’atténuation courante consiste à utiliser les directives JSHINT ignore.

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

Ou:

ignoreThis(); // jshint ignore:line

Personnellement, je trouve cette pratique d’atténuation, sale et déroutante, lorsque notre code contient une grande quantité de références asynchrones/en attente. Mais les avertissements et les erreurs JSHINT sont encore plus confus et sales;) 

37
colxi

Est-ce que jshint supporte async/attend déjà?

Non, pas encore début 2017.

Il semble qu’il ne supporte pas encore async/await. Les personnes travaillant sur jsHint ont décidé de ne pas prendre en charge async/await tant que les normes n'étaient pas encore terminées (apparemment, elles avaient déjà été brûlées auparavant, alors qu'elles évoluaient encore), bien que des implémentations existent déjà (Babel, nodejs, etc.).

Si vous suivez ce fil d'actualité jsHint , il s'agit toujours d'un problème en suspens depuis les commentaires récents il y a 7 et 11 jours.

Et si non, existe-t-il des solutions de contournement?

Depuis juillet 2017, il semble y avoir une portion du code jsHint appelé jshint-esnext prenant en charge async/wait here: https://www.npmjs.com/package/jshint-esnext .

13
jfriend00

Remarque: L'utilisation du package JSHINT-ESNEXT ( NPM , et github ) défini dans la "réponse acceptée" nécessite l'inclusion de l'option "expérimental".

/* experimental: [asyncawait] */ 

ou

/* experimental: [asyncawait, asyncreqawait] */

Voir le code source ici pour plus de détails.

3
JoelABair

L'OP lui a demandé s'il y avait des solutions de contournement. C'est un kludge, mais j'ai remplacé tous mes "async" ou "wait" par "async/** /" et "wait/** /". Ensuite, un script rapide pour les échanger entre '/ * async * /' et '/ * wait * /' me permet de vérifier avec jshint.

Ce n'est pas joli, mais ça nourrit le bulldog.

1
JohnN