Фоновое выполнение скрипта
Я похоже не понимаю как это работает, или что-то не то делаю.
Мне нужно, чтобы часть скрипта отработала позже(в фоне). Но эксперимент над скриптом:
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, время: 08:04. |