Как упорядочить рандомные setTimeout
Как сделать так, чтобы гарантировано вывело в консоль A, B, C. Править функции нельзя.
function A() {
setTimeout(() => {
console.log('A')
}, Math.random()*100)
}
function B() {
setTimeout(() => {
console.log('B')
}, Math.random()*100)
}
function C() {
setTimeout(() => {
console.log('C')
}, Math.random()*100)
}
Ответы (2 шт):
Автор решения: HTO HOT
→ Ссылка
Вот решение через Promise
function A() {
return new Promise((resolve)=>{
setTimeout(() => {
console.log('A')
resolve();
}, Math.random()*100)
});
}
function B() {
return new Promise((resolve)=>{
setTimeout(() => {
console.log('B')
resolve();
}, Math.random()*100)
});
}
function C() {
return new Promise((resolve)=>{
setTimeout(() => {
console.log('C')
resolve();
}, Math.random()*100)
});
}
async function start(){
await A();
await B();
C();
}
start();
Если есть какие-то вопросы спрашивайте.
Автор решения: Leonid
→ Ссылка
Для того, что бы гарантированно получить A,B,C можно по очереди вызвать каждую функцию в разное время, учитывая предельно возможную девиацию выполнения каждой из них.
[A,B,C].forEach((f,i) => {setTimeout(() => {f()}, i*100)});
function A() {
setTimeout(() => {
console.log('A')
}, Math.random()*100)
}
function B() {
setTimeout(() => {
console.log('B')
}, Math.random()*100)
}
function C() {
setTimeout(() => {
console.log('C')
}, Math.random()*100)
}