Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.01.2019, 12:56
Аспирант
Отправить личное сообщение для AleksSergSB Посмотреть профиль Найти все сообщения от AleksSergSB
 
Регистрация: 20.11.2016
Сообщений: 74

Фоновое выполнение скрипта
Я похоже не понимаю как это работает, или что-то не то делаю.
Мне нужно, чтобы часть скрипта отработала позже(в фоне).

Но эксперимент над скриптом:
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() заблокировал дальнейшее выполнение скрипта. Но мне нужно фоновое выполнение асинхронной функции.
Или Асинк Авейт с Промисами предназначены только для последовательного выполнения(с ожиданием на получение результата) и нельзя реализовать фоновое выполнение?
Ответить с цитированием
  #2 (permalink)  
Старый 19.01.2019, 13:23
Аспирант
Отправить личное сообщение для AleksSergSB Посмотреть профиль Найти все сообщения от AleksSergSB
 
Регистрация: 20.11.2016
Сообщений: 74

Варианты:
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

Ну или воткнуть в ассинхрон сетТаймАут с нулевым значением. Но это как-то выглядит жесть костыльно. Есть более "правильные" способы?
Ответить с цитированием
  #3 (permalink)  
Старый 19.01.2019, 13:54
Аспирант
Отправить личное сообщение для AleksSergSB Посмотреть профиль Найти все сообщения от AleksSergSB
 
Регистрация: 20.11.2016
Сообщений: 74

Вопрос снят.
Для управления очередями нужно использовать 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() в общей очереди, не пропускает впереди себя только таймаутные функции.

Всем спасибо :-)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фоновое исполнение скрипта в браузере operbond Ваши сайты и скрипты 2 18.03.2018 21:29
Выполнение скрипта если есть html элемент Янковиц Элементы интерфейса 2 24.10.2017 21:47
Можно ли отключить выполнение скрипта в IE ? dimba jQuery 2 20.11.2014 07:17
Как приостановить выполнение скрипта до получения результата AJAX запроса? Хиросим AJAX и COMET 9 31.10.2011 10:56
как прекратить выполнение скрипта ? kefi Общие вопросы Javascript 3 31.03.2009 19:05