С точки зрения языка, ключевые слова async
/await
в JavaScript разработаны очень близко к тому, как они работают в C#.
У меня есть старая запись в блоге, в которой описываются некоторые дискуссии о том, почему async
был явно добавлен в C#: см. Inferring "async"
здесь. Короче говоря, добавление ключевых слов является потенциально критическим изменением языка; представьте себе существующее приложение, которое использует var await = false;
или что-то в этом роде.
Или, например, как это может быть более двусмысленно, var await = function() {};
, которое будет использоваться как await (x);
. Глядя на использование await (x);
, компилятору было бы трудно решить, что это за выражение. Вы можете возразить, что await
— это ключевое слово, если только в области видимости нет переменной с таким именем, но это становится очень странным.
Гораздо более чистое решение — ввести пару ключевых слов, поэтому async
(которое используется только для функций и лямбда-выражений и не является двусмысленным) включает ключевое слово await
, но только в пределах этой области. Аналогичные преимущества дает наличие function*
для обозначения генераторов, а не просто наличие yield
.
Это не только менее двусмысленно (поддерживается обратная совместимость с кодом, который использует await
для других целей), но и проще для программного обеспечения, и для человека.
person
Stephen Cleary
schedule
26.02.2016