web-dev-qa-db-fra.com

attendre async - erreur de condition de concurrence dans ESLint require-atomic-updates

Le code ci-dessous provoque une condition de concurrence critique lorsqu'il est vérifié avec ESLint :

  let match = false

  try {
    match = await something()
  } catch (err) {
    // do something
  }
  if (match === false) {
    // do something
  }

Quelle est la meilleure façon d'écrire ce bloc de code?

MODIFIER:

  let request = ctx.request.body || {}
  let password = request.password
  let match = false

  try {
    match = await bcrypt.compare(password, 'xxxxx')
  } catch (err) {
    ctx.throw(401, err)
  }
  if (match === false) {
    ctx.throw(401, 'invalid password')
  }

  ctx.body = {
    message: 'logged in ok'
  }

Erreur d'ESLint:

Condition de course possible: ctx.body peut être réaffecté sur la base d'une valeur obsolète de ctx.body require-atomic-updates

6
laukok

Je me rends compte qu'il est un peu tard pour cette réponse, mais uniquement pour les futurs utilisateurs rencontrant cette question, pour désactiver cette règle, dans votre .eslintrc.json ou la configuration appropriée que vous utilisez, spécifiez simplement:

"require-atomic-updates": "off"

2
kyapwc