Почему обещание не ждет? ⇐ Javascript
-
Гость
Почему обещание не ждет?
По сути, я хочу знать, почему здесь немедленно регистрируется Done,
Promise.resolve().then(new Promise(resolve, ignore){ /* немного логики */ решать() }).then(console.log("Готово")); Если вышеизложенного недостаточно, вот более подробная информация:
Я соединяю promise.resove() вот так, проблема в том, что document.querySelectorAll внутри 3-го обещания срабатывает до завершения 2-го обещания, которое я делаю не хочу.
let Promise = Promise.resolve() пусть leftPaneRowEle; обещание = обещание.тогда(функция () { вернуть новое обещание((разрешить, отклонить) => { console.log('найдено по адресу:', leftpaneindexes[0]) const ru: HTMLElement = document.querySelectorAll('#extensionListTable tbody')[0] как HTMLElement leftPaneRowEle = en.children[leftpaneindexes[0]] решать() }) }) обещание = обещание.тогда(функция () { вернуть новое обещание((разрешить, отклонить) => { setTimeout(функция () { leftPaneRowEle.scrollIntoView() leftPaneRowEle.children[0].click() //сделать что-то еще решать() }, 4000) }) }) обещание = обещание.then(функция (en:HTMLElement) { вернуть новое обещание((разрешить, отклонить) => { console.log('найдено по адресу:', leftpaneindexes[1]) const ru: HTMLElement = document.querySelectorAll('#extensionListTable tbody')[0] как HTMLElement leftPaneRowEle = en.children[leftpaneindexes[1]] решать() }) }) РЕДАКТИРОВАТЬ:
Теперь я изменил код так, что все операции с 1-м DOM происходят последовательно и плавно, но теперь 2-й элемент вообще не запускается, почему это так? resolve() существует для обоих . не так ли?
const f = (leftPaneRowEle,index) => { вернуть новое обещание((разрешить, отклонить) => { leftPaneRowEle.scrollIntoView() leftPaneRowEle.children[0].click() console.log('нажат для загрузкиBtn', leftPaneRowEle) //еще немного кода решать() }) } const ru: HTMLElement = document.querySelectorAll('#extensionListTable tbody')[0] как HTMLElement const leftPaneRowEle0 = en.children[leftpaneindexes[0]] const leftPaneRowEle1 = en.children[leftpaneindexes[1]] пусть обещают = Promise.resolve() обещание = обещание.тогда(f(leftPaneRowEle0,0)) обещание = обещание.тогда(f(leftPaneRowEle1,1))
По сути, я хочу знать, почему здесь немедленно регистрируется Done,
Promise.resolve().then(new Promise(resolve, ignore){ /* немного логики */ решать() }).then(console.log("Готово")); Если вышеизложенного недостаточно, вот более подробная информация:
Я соединяю promise.resove() вот так, проблема в том, что document.querySelectorAll внутри 3-го обещания срабатывает до завершения 2-го обещания, которое я делаю не хочу.
let Promise = Promise.resolve() пусть leftPaneRowEle; обещание = обещание.тогда(функция () { вернуть новое обещание((разрешить, отклонить) => { console.log('найдено по адресу:', leftpaneindexes[0]) const ru: HTMLElement = document.querySelectorAll('#extensionListTable tbody')[0] как HTMLElement leftPaneRowEle = en.children[leftpaneindexes[0]] решать() }) }) обещание = обещание.тогда(функция () { вернуть новое обещание((разрешить, отклонить) => { setTimeout(функция () { leftPaneRowEle.scrollIntoView() leftPaneRowEle.children[0].click() //сделать что-то еще решать() }, 4000) }) }) обещание = обещание.then(функция (en:HTMLElement) { вернуть новое обещание((разрешить, отклонить) => { console.log('найдено по адресу:', leftpaneindexes[1]) const ru: HTMLElement = document.querySelectorAll('#extensionListTable tbody')[0] как HTMLElement leftPaneRowEle = en.children[leftpaneindexes[1]] решать() }) }) РЕДАКТИРОВАТЬ:
Теперь я изменил код так, что все операции с 1-м DOM происходят последовательно и плавно, но теперь 2-й элемент вообще не запускается, почему это так? resolve() существует для обоих . не так ли?
const f = (leftPaneRowEle,index) => { вернуть новое обещание((разрешить, отклонить) => { leftPaneRowEle.scrollIntoView() leftPaneRowEle.children[0].click() console.log('нажат для загрузкиBtn', leftPaneRowEle) //еще немного кода решать() }) } const ru: HTMLElement = document.querySelectorAll('#extensionListTable tbody')[0] как HTMLElement const leftPaneRowEle0 = en.children[leftpaneindexes[0]] const leftPaneRowEle1 = en.children[leftpaneindexes[1]] пусть обещают = Promise.resolve() обещание = обещание.тогда(f(leftPaneRowEle0,0)) обещание = обещание.тогда(f(leftPaneRowEle1,1))
Мобильная версия