# Async Function (ES2017)
# Объявление
// Стрелочная
const foo = async () => {
const a = await AsyncFunction();
};
// Обычная
async function foo() {
const a = await AsyncFunction();
}
// Стрелочная
(async () => {
const a = await AsyncFunction();
})()
// Обычная
(async function() {
const a = await AsyncFunction();
})();
# Описание
Async Function
- асинхронная функция (Promise
+Generator
)- Асинхронная функция возвращает Promise, для получения значения используется then
- await дожидается выполнения Promise, вытаскивает значение и возвращает его
- await можно использовать только внутри асинхронной функции
- await необязательно ставить перед вызовом асинхронной фунцкии. это может быть любая функция, возвращающая Promise
# Примеры
// AJAX-запрос
const getResource = async (url) => {
const res = await fetch(url);
return await res.json();
}
getResource('https://swapi.co/api/people/1/')
.then(body => console.log(body))
// Асинхронная функция
async function getUser(id) {
return { id:1 };
}
async function main() {
let user = await getUser(1);
console.log(user);
}
main();
# Использование в классах и объектах
// Свойство объекта
const obj = {
getUser: async function(id) {
//
}
}
// Метод объекта
const obj = {
async getName() {
return fetch('https://www.example.com');
}
}
// Класс
class Obj {
async getResource() {
return fetch('https://www.example.com');
}
}