Подтвердить что ты не робот

JSHint поддерживает async/await?

Я использую JSHint для проекта JavaScript (с кодом Visual Studio). И в этом проекте я использую async/wait, который JSHint выделяет как ошибки.

Я попытался настроить jshint, но похоже, что максимальная версия "esversion" равна 6.

Поддерживает ли jshint async/ожидание? Если это так, как включить его? А если нет, есть ли обходные пути?

4b9b3361

Ответ 1

Обновление (июль 2018): Async/await появится с выпуском JsHint 2.10.0. +info: 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 и источник в github.

Установка: $ npm установить -g jshint-esnext

Прямо сейчас (июль 2017 г.) это единственный приемлемый доступный подход для поддержки await/async в JSHINT.


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;)

Ответ 2

Поддерживает ли jshint async/wait?

Нет, еще не на начало 2017 года.

Похоже, что он еще не поддерживает async/await. Люди, работающие над jsHint, решили не поддерживать async/await до тех пор, пока стандарты не появятся на более поздней стадии (очевидно, были сожжены ранее, поддерживая слишком рано, когда они все еще меняются), хотя реализации уже существуют (Babel, nodejs и т.д.)).

Если вы выполните этот jsHint open issue thread, он по-прежнему остается открытым с недавних комментариев 7 и 11 дней назад.

И если нет, существуют ли какие-либо обходные пути?

По состоянию на июль 2017 года существует, по-видимому, вилка кода jsHint, называемая jshint-esnext, которая имеет поддержку async/wait здесь: https://www.npmjs.com/package/jshint-esnext.

Ответ 3

Примечание. Использование разветвленного пакета JSHINT-ESNEXT (NPM и github), как предлагается в "принятом ответе", требует включения опции "эксперимент".

/* experimental: [asyncawait] */

или же

/* experimental: [asyncawait, asyncreqawait] */

Посмотрите исходный код здесь для деталей.

Ответ 4

ФП спросил, есть ли какие-нибудь способы обхода. Это kludge, но я заменил все свои "асинхронные" или "ждущие" на "async/**/" и "await/**/". Затем быстрый script, чтобы поменять их на '/* async */' и '/* await */', позволяет мне проверять с помощью jshint.

Это не очень, но он кормит бульдога.