Как стать автором
Обновить

Комментарии 13

Так-то подборка неплохая. Но за эмодзи в листингах — персональный котёл в аду этому господину!
Благодаря данному улучшению точка теперь соответствует абсолютно любому символу. Для того, чтобы старые регулярные выражения продолжали бы работать так, как раньше, при создании регулярных выражений, следующих новым правилам, нужно использовать флаг \s.

Я думаю тут неточность перевода или его источника. Старые регулярные выражения с точкой свое поведение не меняют, они так и будут работать, как и раньше, а вот чтоб они заработали по новому в режиме dotAll надо как раз добавить флаг /s.

Спасибо за статью!
И жаль, что листинги в картинках, а не в коде.
А статья супер!
Плюсую, листинги должны быть кодом, а не картинками.
> Вариант 2: использование catch в каждом выражении await

У вас там корявое объяснение: «each await expression is a Promise in itself». Это утверждение эквивалентно такому коду:
(await doubleAfter1Sec(a)).catch(...)
Хотя по факту он такой:
await (doubleAfter1Sec(a).catch(...))
И await не возвращает промиз, в этом как раз его смысл. Вы здорово сбиваете с толку такими примерами, как будто это что-то новое, привнесенное await'ом, а это всего лишь использование await'а со старыми добрыми промизами.

И вообще, рекомендую http://es6-features.org/, как один из сайтов, где все новые фичи изложены кратко с минимальными примерами.
Я нормально понял логику работы async/await, когда в поглядел сгенерированный код в .net. Когда увидел в JS сразу порадовался, но использовать в проекте начали прям именно сегодня.
Надо проверять переводимые материалы :-)

Решение в 6.2 явно корявейшее и таким я бы пользоваться не стал. Всё же матчасть стоит подтягивать. Можно просто и даже очень просто.
async function doubleAndAdd2(a, b) {
  a = doubleAfter1Sec(a);
  b = doubleAfter1Sec(b);
  return await a + await b;
}


Ну и ошибонька, явно код не проверялся.
6.1 и 6.2, надо писать setTimeout(() => resolve(param * 2), 1000);

Можно поглядеть: repl.it/repls/AmusingZealousEnvironment
Ну да, это касается ES2017.
Не понял прикола с for await, ведь await в теле цикла делает тоже самое, но имхо более явно.

И правильно сделали что не поняли. Настоящая цель появления for await — это итерация по последовательности элементов, где без await невозможно даже определить будет ли следующий или последовательность уже закончилась.


Например, эта конструкция нужна для итерации по асинхронному генератору. Вот пример такого генератора из пропозала:


async function* readLines(path) {
  let file = await fileOpen(path);

  try {
    while (!file.EOF) {
      yield await file.readLine();
    }
  } finally {
    await file.close();
  }
}
Эмотиконы и другие двухбайтовые символы представлены в кодировке Unicode последовательностями из нескольких байтов. Поэтому методы padStart() и padEnd() работают с ними не так, как того можно ожидать.

В статье причина этого явления объясняется немного неверно. Во-первых, эмотиконы состоят из 4-х байт (\u2764\uFE0F — это 4 байта, а не 2). Во-вторых в JavaScript в строках все символы 2-байтовые. В результате 1 эмотикон это 2 JS-символа. А есть эмотиконы, которые состоят больше, чем из 4-х байт, например, эмодзи с разным цветом кожи, которые образуются комбинацией других эмоджи.

Спасибо автору статьи. Познавательно, нужно. В закладки добавил. To be continued?
SharedArrayBuffer — согласно developer.mozilla.org/
отключено по умолчанию во всех основных браузеров из-за Spectre
Зарегистрируйтесь на Хабре, чтобы оставить комментарий