Code Example 1: Promise states
❓ Какое состояние у каждого из этих промисов? Что означает каждое состояние?
const pendingPromise = new Promise((resolve, reject) => {
});
const fulfilledPromise = Promise.resolve('успех');
const rejectedPromise = Promise.reject(new Error('ошибка'));
Code Example 2: Creating promise and state transitions
❓ Какие состояния пройдёт этот промис? Какой callback будет вызван и почему?
const promise = new Promise((resolve, reject) => {
console.log('Промис создан, состояние: pending');
setTimeout(() => {
const success = Math.random() > 0.5;
if (success) {
resolve('Данные получены');
} else {
reject(new Error('Ошибка загрузки'));
}
}, 1000);
});
promise
.then(value => {
console.log('Fulfilled:', value);
})
.catch(error => {
console.log('Rejected:', error.message);
});
Code Example 3: promiseState utility
❓ Как работает эта функция promiseState? Что она вернёт сразу после создания промиса и через 1.5 секунды?
function promiseState(promise) {
const pending = { status: 'pending' };
return Promise.race([promise, pending])
.then(
value => (value === pending) ? pending : { status: 'fulfilled', value },
reason => ({ status: 'rejected', reason })
);
}
const myPromise = new Promise(resolve => setTimeout(() => resolve('done'), 1000));
promiseState(myPromise).then(console.log);
setTimeout(() => {
promiseState(myPromise).then(console.log);
}, 1500);
Code Example 4: Immutability of state
❓ Что выведет console.log? Почему второй resolve и reject не работают?
const promise = new Promise((resolve, reject) => {
resolve('первое значение');
resolve('второе значение');
reject(new Error('ошибка'));
});
promise.then(value => {
console.log(value);
});
Code Example 5: Executor execution order
❓ В каком порядке выполнятся console.log? Почему?
console.log('1. До создания промиса');
const promise = new Promise((resolve, reject) => {
console.log('2. Внутри executor');
resolve('готово');
});
console.log('3. После создания промиса');
promise.then(value => {
console.log('4. В обработчике:', value);
});
console.log('5. После .then()');
Code Example 6: .then() always async
❓ В каком порядке выполнятся console.log, учитывая что промис уже resolved?
const resolved = Promise.resolve('уже готово');
resolved.then(value => {
console.log('2.', value);
});
console.log('1. Синхронный код');
Code Example 7: Promise.resolve() with different values
❓ Что вернёт Promise.resolve() в каждом из трёх случаев? Что такое thenable?
// Case 1:
Promise.resolve(42);
// Case 2:
const p = Promise.resolve('test');
Promise.resolve(p) === p;
// Case 3:
const thenable = {
then(resolve) {
resolve('из thenable');
}
};
Promise.resolve(thenable).then(console.log);
Code Example 8: Promise.allSettled()
❓ Что выведет этот код? Чем Promise.allSettled отличается от Promise.all?
const promises = [
Promise.resolve('успех'),
Promise.reject(new Error('ошибка')),
Promise.resolve('ещё успех')
];
Promise.allSettled(promises).then(results => {
results.forEach(result => {
if (result.status === 'fulfilled') {
console.log('Успех:', result.value);
} else {
console.log('Ошибка:', result.reason.message);
}
});
});
Code Example 9: Microtasks vs setTimeout
❓ В каком порядке выполнятся console.log? Почему Promise выполняется раньше setTimeout?
console.log('1. Синхронный');
setTimeout(() => console.log('4. setTimeout'), 0);
Promise.resolve()
.then(() => console.log('3. Микрозадача'));
console.log('2. Синхронный');