Created
September 29, 2017 18:51
-
-
Save batogov/7fcade2b986d38e1363217237c0b897b to your computer and use it in GitHub Desktop.
Задачка на асинхронность
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var order = ['A', 'B', 'C']; | |
var memory = []; | |
function worker() { | |
// Находим в памяти индекс нужного нам по порядку значения | |
var i = memory.findIndex(function(curr) { | |
return order[0] === curr; | |
}); | |
// Если оно есть | |
if (i !== -1) { | |
// Выводим в консоль | |
console.log(order.shift()); | |
// Удаляем из памяти | |
memory.splice(i, 1); | |
// Если память не пуста, повторно вызываем функцию | |
if (memory.length > 0) { | |
worker(); | |
} | |
} | |
} | |
/* | |
Коллбек, который вызывается в заданных функциях. | |
*/ | |
function clb(value) { | |
// Добавляем значение в память | |
memory.push(value); | |
worker(); | |
} | |
/* | |
Функции, которые вызовут коллбек через случайное время. | |
Задача – сделать вывод в соответствии с порядком в массиве order. | |
*/ | |
function foo(clb) { | |
setTimeout(function() { | |
clb('A') | |
}, Math.random() * 1000); | |
} | |
function bar(clb) { | |
setTimeout(function() { | |
clb('B') | |
}, Math.random() * 1000); | |
} | |
function baz(clb) { | |
setTimeout(function() { | |
clb('C') | |
}, Math.random() * 1000); | |
} | |
foo(clb); | |
bar(clb); | |
baz(clb); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment