Skip to content

Instantly share code, notes, and snippets.

@batogov
Created September 29, 2017 18:51
Show Gist options
  • Save batogov/7fcade2b986d38e1363217237c0b897b to your computer and use it in GitHub Desktop.
Save batogov/7fcade2b986d38e1363217237c0b897b to your computer and use it in GitHub Desktop.
Задачка на асинхронность
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