Приветствую!
Для тренировки написал код, который имитирует выполнение анимации шаг за шагом, использовал Promise. В связи с этим 2 вопроса:
1. Правильно ли я понял логику работы Promise? Если нет, то подскажите, как правильно было бы написать данный код...
function animation(step, delay, log) {
return new Promise((resolve, reject) => {
if(typeof delay === "number") {
setTimeout(() => {
resolve(log(`Анимация №:${step}, выполнена успешно`));
}, delay);
} else reject(log(`Анимация №:${step}, не выполнена`));
});
}
function log(result) {
console.log(`Лог: ${result}`);
}
animation(1, 500, log)
.then(animation(2, 1000, log))
.then(animation(3, 2000, log));
// Лог: Анимация №:1, выполнена успешно
// Лог: Анимация №:2, выполнена успешно
// Лог: Анимация №:3, выполнена успешно
2. Пытаюсь имитировать ошибку на 4 шаге, передав не number, а string. Почему тогда 4 шаг выполняет вперед первых 3х, и с чем связана ошибка?
function animation(step, delay, log) {
return new Promise((resolve, reject) => {
if(typeof delay === "number") {
setTimeout(() => {
resolve(log(`Анимация №:${step}, выполнена успешно`));
}, delay);
} else reject(log(`Анимация №:${step}, не выполнена`));
});
}
function log(result) {
console.log(`Лог: ${result}`);
}
animation(1, 500, log)
.then(animation(2, 1000, log))
.then(animation(3, 2000, log))
.then(animation(4, "500", log));
// Лог: Анимация №:4, не выполнена
// Uncaught (in promise) undefined
// Лог: Анимация №:1, выполнена успешно
// Лог: Анимация №:2, выполнена успешно
// Лог: Анимация №:3, выполнена успешно