Промисы используются для обработки асинхронных операций в JavaScript. Они позволяют работать с асинхронными действиями более удобным и управляемым образом.
Создание промиса:
const myPromise = new Promise((resolve, reject) => {
let success = true;
if (success) {
resolve("Operation was successful!");
} else {
reject("Operation failed.");
}
});
Использование промиса:
myPromise
.then(result => {
console.log(result); // "Operation was successful!"
})
.catch(error => {
console.log(error); // "Operation failed."
});
Цепочки промисов:
myPromise
.then(result => {
console.log(result); // "Operation was successful!"
return "Next step";
})
.then(nextResult => {
console.log(nextResult); // "Next step"
})
.catch(error => {
console.log(error); // "Operation failed."
});
async и await позволяют писать асинхронный код, который выглядит и ведет себя как синхронный, упрощая чтение и управление асинхронными операциями.
Создание асинхронной функции:
async function fetchData() {
try {
let response = await fetch("<https://api.example.com/data>");
let data = await response.json();
console.log(data);
} catch (error) {
console.error("Error fetching data:", error);
}
}
fetchData();
Использование async и await:
async function asyncFunction() {
let result = await myPromise;
console.log(result); // "Operation was successful!"
}
asyncFunction();
Замыкания — это функция, которая имеет доступ к переменным из своей внешней (замыкающей) области видимости, даже после того, как внешняя функция перестала выполняться.
Пример замыкания:
function outerFunction() {
let outerVariable = "I'm outside!";
function innerFunction() {
console.log(outerVariable); // Имеет доступ к outerVariable
}
return innerFunction;
}
const myClosure = outerFunction();
myClosure(); // "I'm outside!"
Практическое применение замыканий:
function makeCounter() {
let count = 0;
return function() {
count++;
return count;
};
}
const counter = makeCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
Модули позволяют разделить код на отдельные файлы и повторно использовать их в других частях проекта.
Экспортирование:
Именованный экспорт:
// utils.js
export function add(a, b) {
return a + b;
}
export const pi = 3.14159;
Экспорт по умолчанию:
// utils.js
export default function subtract(a, b) {
return a - b;
}
Импортирование:
Именованный импорт:
// main.js
import { add, pi } from './utils.js';
console.log(add(2, 3)); // 5
console.log(pi); // 3.14159
Импорт по умолчанию:
// main.js
import subtract from './utils.js';
console.log(subtract(5, 2)); // 3
Импорт всего содержимого модуля:
// main.js
import * as Utils from './utils.js';
console.log(Utils.add(2, 3)); // 5
console.log(Utils.pi); // 3.14159
Эти продвинутые концепции и техники позволяют более эффективно и структурированно писать JavaScript-код, а также управлять асинхронными операциями и повторно использовать код.