Промисы - Задачи для собеседования - Синхронные Flashcards
Задачи для собеседования
const getData = () =>
new Promise((res, rej) => {
setTimeout(() => {
res(‘some data’);
// rej(“some error”);
}, 1000);
});
getData()
.then((data) => {
console.log(“then1”, data);
return new Promise((res, rej) => {
setTimeout(() => {
// res(“some data from request2”);
rej(“some error”);
}, 2000);
});
})
.then((data) => {
console.log(“then2”, data);
return 20;
})
.catch((data) => {
console.log(“catch1”, data);
// return;
})
.then((data) => {
console.log(“then3”, data);
return b;
})
.then((data) => {
console.log(“then4”, data);
return 40;
})
.catch((data) => {
console.log(“catch2”, data);
return 50;
})
.finally((data) => {
console.log(“finally”, data);
return 60;
})
.then((data) => {
console.log(“then5”, data);
});
Все методы промис возвращают новый промис.
Ответ:
then1 - some data
catch1 - some error
then3 - 5
catch2 - typeError
finally - undefined -т.к. ничего не принимает и не возвращает - всегда, нельзя ничего возвращать.
then5 - 50 - пропускает finally.
Идем по цепочке -> смотрим первое then, если выполнилось переходим к следующему, если нет, то переходим на catch, пропуская все then, которые были написаны перед ним.
Если внутри будет функция асинхронная, то мы попадем в следующий then, даже если не будет определен тип, так как мы не вызываем промис.
.then((data) => {
console.log(“then3”, data);
setTimeout (() => {
b
}, 1000)
return b;
})
.then((data) => {
console.log(“then4”, data);
return 40;
})
Ответ:
then3 5
then4 - undefined
В другом случае, когда мы вызываем промис, мы не можем в дальнейшем попасть на ошибку. Ошибка попадает в колстэк.
.then((data) => {
console.log(“then3”, data);
return new Promise (setTimeout (() => {
b
}, 1000))
return b;
})
.then((data) => {
console.log(“then4”, data);
return 40;
})
.catch((data) => {
console.log(“catch2”, data);
return 50;
})
finally при возврате перебивает все оветы и возвращает результат finally