ожидание завершения коллбэков
Помогите решить такую задачу. Надо вместо точек вставить некоторый код, не обращающийся к переменной a и такой, что бы console.log выводил: 1,
a= 0; setTimeout(function(){a= 1},1000) . . . console.log(a) |
new Promise(function(resolve, reject){setTimeout(function(){a = 1; resolve(null)})}) .then(function(){console.log(a)}) |
Цитата:
|
Цитата:
|
И при чем тут, кстати, io/node?
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Почему бы вам не начать изучать JS, вместо того чтобы засирать форум тупняком, и при этом еще дерзить?
|
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
freeneutron,
Кстати, раз уж Вы такой чародей, может Вы и мне поможете с одним вопросом, который меня сильно волнует. Я собрался идти в казино сегодня. Вот, мне желательно узнать, проиграю я, или выиграю. Если я проиграю, я вообще сегодня не пойду туда. Не поможете? |
// вставьте
console.log(1) // console.log будет выводить 1 и не будет обращаться к переменной, условия задачи не нарушены. :) |
Цитата:
alert(1); конечно, он бы не помог, но вписался лаконично в уже существующее безобразие :) |
А вот подскажите плз, что действительно не могу понять.
Допустим мы вставим: while(process.uptime()<2) Т.е. пока процесс не проработал 2 секунды, то цикл будет выдавать console.log('a')равное 0, значение его не изменится. Т.е. получается, что таймер не запустится (точнее колбэки) покуда интерпретатор не отработает последнюю строку линейного кода? setInterval понятно, он отработает как надо. |
Цитата:
Цитата:
|
Цитата:
Цитата:
Но про то, что Вы имели ввиду, тоже ясно, мой пример Выше это наглядно показывает. |
Цитата:
Точней, коллбек сеттится на событие таймера.. Когда событие таймера срабатывает, этот коллбек начинает исполняться. Таймер сам его запускает, но только в том случае, если поток не занят. В противном случае, он кидается в очередь на исполнение. Во время своего исполнения, он также как и любой код блокирует единственный поток. А возвращаясь к тому вопросу, если будет долгий цикл, он просто не даст начать исполняться коллбеку, который назначен на время задержки. Коллбек будет вынужден "ждать", пока цикл отработает. |
Цитата:
А колбэки, получается друг друга не блокируют? Т.к. вывод колбэка одной и той же функции осуществляется вовсе не в порядке поступления запроса. Так? PS: Может я наивные вопросы задаю, но у меня пока трудно всё это в голове укладывается. Интуитивно понимаю, даже уже кое-чего написал, работает, для линейности стадий обработки использовал оборачивание в промисы. Но полной ясности представления ещё нет. :) |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
a= 0; setTimeout(function(){a= 1},1000) setTimeout(function(){cb();},1000); var cb = () => console.log(a) работает везде, где имеют место "стрелочные функции" из нового стандарта. ---- Но, возможно, задача была не в этом? здесь по сути мы запустили console.log в другом "тике". Может, надо это сделать в том же "тике", в котором отработали строки 1 и 2? Тогда на 3 строку надо вставить код, который будет не менее секунды прокручивать "цикл очереди сообщений" ноды (подобно тому как модальные окна в винде крутят очередь потока, блокируя вызывающую функцию, но не UI в целом). Можно ли так сделать, судить не берусь. |
Цитата:
"Ловкость рук и никакого мошенничества" (с) :) На сколько я понимаю, данная запись равносильна: a= 0; setTimeout(function(){a= 1},1000) setTimeout(function(){cb();},1000); var cb = function() { console.log(a) } Но, тем не менее, решает условие задачи в том виде, как оно представлено. |
Цитата:
a= 0; setTimeout(function(){a= 1},1000) c=console;console={"log":function(){c.log(5);console=c}}; console.log(a) |
Яростный Меч,
Твой код эквивалентен a= 0; setTimeout(function(){a= 1},1000) setTimeout(function(){console.log(a)},1000) Только написан через жопу. Про какие стрелочные функции и новые тики ты говоришь, хз. |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
PS: Не сочти за хамство, парень реально старается вникнуть в вопрос и помогает по мере возможности, но у тебя было совсем "не туда". Т.е. я, как новичок, все эти варианты отработал, кроме как "стрелочных функций", да ещё и не учитывал, что они кушают "\n", но если бы не ты, то не обратил бы на данный момент внимания :). |
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 16:31. |