1. Fixed markdown for proper render of code examples. 2. Added missing translation. 3. Translated comments. 4. Turned bits of code back english ( like function() instead of функция() ). 5. Fixed page styling structure.
		
			
				
	
	
	
		
			4.9 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	title, localeTitle
| title | localeTitle | 
|---|---|
| Await Promises | Ожидание обещаний | 
Ожидание обещаний
В async / await операторы облегчают реализацию многого асинхронного Promises. Они также позволяют инженерам писать более четкий, более сжатый, проверяемый код.
Чтобы понять эту тему, вы должны иметь четкое представление о том, как работают Обещания .
Основной синтаксис
function slowlyResolvedPromiseFunc(string) { 
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(string);
    }, 5000);
  });
}
async function doIt() {
  const myPromise = await slowlyResolvedPromiseFunc("foo");
  console.log(myPromise); // "foo"
}
doIt();
Следует отметить несколько моментов:
- Функция, которая заключаетв себе объявление awaitдолжна содержать операторasync. Это подскажит Инттерпретатору JS, что нужно дождаться разрешение и отвержения resolve.
- Оператор awaitдолжен быть подключен во время объявления const.
- Это работает как для reject, так и дляresolveThere are a few things to note:
Вложенные Promises vs. Async / Await
Реализация одного Promise довольно просто. В отличии от Цепочки Promises или создания набора зависимостей, что может привести с созданию "spagetti code" ("спагетти из кода").
В следующих примерах подразумевается, что библитека request-promise доступна по rp.
Цепочки / Вложенные Promises
// Первый Promise
const fooPromise = rp("http://domain.com/foo");
fooPromise.then(resultFoo => {
    // Ожидайте разрешения "foo"
    console.log(resultFoo);
    const barPromise = rp("http://domain.com/bar");
    const bazPromise = rp("http://domain.com/baz");
    return Promise.all([barPromise, bazPromise]);
}).then(resultArr => {
    // Обрабатываем разрешения «bar» и «baz» здесь
    console.log(resultArr[0]);
    console.log(resultArr[1]);
});
async и await Promises
// Оберните все в асинхронную функцию
async function doItAll() {
    // Получите данные из конечной точки "foo", но дождаться разрешения
    console.log(await rp("http://domain.com/foo"));
    // Параллельно запустите следующие две асинхронные функции,
    // не ждите пока "bar" запустит "baz"
    const barPromise = rp("http://domain.com/bar");
    const bazPromise = rp("http://domain.com/baz");
    // Когда обе запуститлись параллельно, ждите обе
    const barResponse = await barPromise;
    const bazResponse = await bazPromise;
    console.log(barResponse);
    console.log(bazResponse);
}
// Наконец, вызовите асинхронную функцию
doItAll().then(() => console.log('Done!'));
Преимущества использования async и await должны быть ясны. Этот код более читабельный, модульный и поддающийся тестированию.
Справедливо заметить, что не смотря на большую степень параллелилизма, лежащий в основе вычислительный процесс идентичен тому из предыдущего примераю
Разрешение Ошибок / Rejection
Обыкновенный блок попытка-перехват разрешит отвергнутый Promise.
async function errorExample() {
  try {
    const rejectedPromise = await Promise.reject("Oh-oh!");
  } catch (error) {
    console.log(error); // "Uh-oh!"
  }
}
errorExample();