Фоновое выполнение скрипта
Я похоже не понимаю как это работает, или что-то не то делаю.
Мне нужно, чтобы часть скрипта отработала позже(в фоне). Но эксперимент над скриптом: async function assinchrone(){ return new Promise((resolve) => { let i, test; console.log("promise Start") for (i=0;i<10000;i++){ test+=i; } console.log("promise END"+i) resolve(i); }) } console.log("start") assinchrone() .then((res) => console.log("ответ: "+res)); console.log("end")показывает: start promise Start promise END10000 end Получается, что assinchrone() заблокировал дальнейшее выполнение скрипта. Но мне нужно фоновое выполнение асинхронной функции. Или Асинк Авейт с Промисами предназначены только для последовательного выполнения(с ожиданием на получение результата) и нельзя реализовать фоновое выполнение? |
Варианты:
function assinchrone(){ return new Promise((resolve) => { resolve() // не слишком ли жуткий костыль? }) } console.log("start") assinchrone() .then((res) => { let test,i; console.log("promise Start") for (i=0;i<100000;i++){ test=polygonControl.getStartCoordinats(); } console.log("promise END"+i) }) console.log("end") выполняется так как мне надо: start end promise Start promise END100000 Ну или воткнуть в ассинхрон сетТаймАут с нулевым значением. Но это как-то выглядит жесть костыльно. Есть более "правильные" способы? |
Вопрос снят.
Для управления очередями нужно использовать setImmediate() и process.nextTick() Для ищущих аналогичный ответ. Мой пример должен выглядеть так: console.log("start") process.nextTick(()=>{ let test,i; console.log("asynchrone Start") for (i=0;i<100000;i++){ test+=i; } console.log("asynchrone END"+i) }) console.log("end") process.nextTick() выполняется сразу после основного скрипта. senImmediate() в общей очереди, не пропускает впереди себя только таймаутные функции. Всем спасибо :-) |
Часовой пояс GMT +3, время: 23:05. |