Точно так же, как вы изо всех сил пытаетесь справиться с обещаниями в ECMAScript 2015, Microsoft поспешила предоставить поддержку асинхронности в движке Chakra и Edge.
Асинхронный код обычно затруднен в классическом JavaScript, что является странной ситуацией, учитывая, сколько асинхронного кода вам обычно приходится писать. Конечно, все стало намного сложнее с увеличением использования JavaScript для создания приложений.
В ECMAScript 2015 обещания были введены как способ сделать асинхронный код более похожим на код синхронизации. Большинство начинающих и средних программистов на JavaScript находят обещания немного загадочными. Они кажутся простыми, когда вы впервые встречаетесь с ними, но на самом деле они работают тонко, и если вы действительно хотите в полной мере использовать их, вам действительно нужно понимать эту тонкость.
Для ECMAScript 2016 Promises отсутствуют, а асинхронные функции включены. Да, я знаю, вы годами ждете обновления JavaScript, а затем …
Важная часть заключается в том, что функции Async действительно упрощают использование async, и хотя Promises используются для реализации функций Async, вы можете более или менее игнорировать их и то, как все это работает.
Если у вас есть существующая функция, которая возвращает обещание, вы можете использовать ее в асинхронной функции, и это в основном означает игнорирование того факта, что она асинхронна. Например, если myFunc1 возвращает обещание, вы можете использовать его как функцию Async:
асинхронная функция myFunc2 () {ожидание myFunc1 (); остальная часть программы;}
Вот и все — ничего лишнего, ничего сложного и почти никаких намеков на асинхронную работу. Если вы помечаете функцию как асинхронную, вы можете использовать в ней ожидание для вызова любой функции, возвращающей обещание. Вам не нужен обратный вызов, и вам не нужно определять какие-либо методы Promise. Вы можете рассматривать это так, как будто ваш код приостанавливается, пока результат ожидаемой функции не завершится, и он не вернет свои результаты. Затем вы можете написать код, который обрабатывает результаты после вызова, как если бы функция была синхронной.
Есть гораздо больше деталей, касающихся результатов и обработки ошибок, но, по сути, если вы просто обрабатываете код как синхронный, все в основном будет работать.
Проще говоря, async и await — единственный разумный способ выполнять асинхронное программирование.
Единственная проблема заключается в том, что, если вы не хотите использовать один из компиляторов JavaScript, например Babel, для установки полифила для вас, нет возможности использовать async и await в JavaScript, пока ECMA2016 не будет завершен и реализован — или есть?
Microsoft представила async и await в C # и, очевидно, считает это хорошей идеей — настолько, что команды Chakra и Edge пошли навстречу и добавили ее в Edge в качестве экспериментальной функции, которую вы можете включить.
В блоге EdgeDev есть много деталей о том, как это реализовано, что интересно, но важно то, что вам не нужно знать детали, чтобы использовать их.
Следующее видео также объясняет основные идеи:
Пока поддержка async / await не станет немного более распространенной, вы не сможете в полной мере использовать ее, но вы можете использовать ее, чтобы понять, насколько это просто.
Итак, будущее уже здесь, но мы не сможем его использовать, пока оно не станет здесь более широко. Учитывая, что Edge оставляет IE, может пройти некоторое время, прежде чем это произойдет.