Порядок выполнения 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, время: 23:03. |