Порядок выполнения then в promise
Добрый день! Проблема с пониманием promise
function func() {
return new Promise(resolve => resolve())
}
func()
.then(() => {
setTimeout(() => console.log(1), 0)
return func()
})
.then(() => console.log(2))
Если последующий then должен ждать выполнение предыдущего, почему выводит 2 потом 1? Буду благодарен за помощь |
Потому что setTimeout никакого отношения к промисам не имеет и "запускает отдельный поток"(на самом деле нет, но так проще для понимания, детали подождут). Промисы вещь в себе, промис ожидает только другой промис.
Promise.resolve() //тоже самое что ваша func только встроенное
.then(() => {
return new Promise(
resolve => setTimeout(() => {
console.log(1);
resolve();
}, 0)
);
})
.then(() => console.log(2))
|
У вас и не написано, что надо ждать. Хотя setTimeout никакого отношения к промисам не имеет, можно написать такую функцию
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
new Promise(resolve => {
delay(0).then(() => console.log(1)).then(resolve);
}).then(() => console.log(2));
Цитата:
setTimeout(() => alert("Я в отдельном потоке"), 0);
while(true) {}
То, что оно не запускает отдельный поток, намного легче и правильно для понимания. Если setTimeout "запускает отдельный поток", то почему alert не выскочил? |
упростил для понимания
var x = new Promise((res)=>{
setTimeout(()=>{
console.log(1);
res();
},1000);
});
x.then(() => console.log(2));
|
Какой же бред я написал. Всем спасибо за объяснения! Теперь все понятно.
|
| Часовой пояс GMT +3, время: 18:17. |