как я могу получить доступ к переменной в блоке try в другом блоке try?

1

http://blog.grossman.io/how-to-write-async-await-without-try-catch-blocks-in-javascript/ В этой ссылке есть некоторые коды, которые имеют доступ к переменной в try catch, но когда Я пытаюсь это сделать на своем сервере. Это не работает, потому что это выходит за рамки. как я могу это сделать?

try {
  const foo = "bar"
} catch (e) {
  console.log(e)
}

try {
  console.log(foo) -> is not defined
} catch (e) {
  console.log(e)
}
Теги:
async-await
asynchronous
try-catch

1 ответ

5
Лучший ответ

Автор этого сообщения явно допустил ошибку - это происходит со всеми нами.

Таким образом, объявления const являются блочными, как говорят документы:

Константы являются блочными, как и переменные, определенные с помощью оператора let. Значение константы не может быть изменено путем повторного назначения, и его нельзя переопределить.

Поэтому вы не можете получить доступ к нему за пределами блока try-catch.

Решить проблему:

  • Либо используйте var вместо const:

    try {
      // When declared via 'var', the variable will
      // be declared outside of the block
      var foo = "bar"
    } catch (e) {
      console.log(e)
    }
    
    try {
      console.log(foo)
    } catch (e) {
      console.log(e)
    }
    
  • Или вы можете объявить переменную за пределами try-catch, используя let:

    // Maybe it clearer to declare it with let and 
    // assign the value in the first try-catch
    let foo;
    try {
      foo = "bar"
    } catch (e) {
       console.log(e)
    }
    
    try {
      console.log(foo)
    } catch (e) {
      console.log(e)
    }
    
  • 0
    Как вы можете видеть в посте, автор использует const , как это работает?
  • 0
    @PhillipYS Я бы сказал, что это ошибка.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню