Witam,
Przewertowałem dziesiątki tutoriali i z każdym kolejnym rozumiem coraz mniej. Bardzo proszę o pomoc w zrozumieniu zasady działania obietnic w JavaScripcie - kiedy używać, jak używać, co możemy dzięki nim uzyskać i jakie są korzyści z takiej a nie innej asynchroniczności.
Przykład: piszę proste memory i program ma:
- Przypisać 9 kolorów do 18-tu divów reprezentujących karty.
- Wyświetlić układ kart w przypisanych do nich kolorach przez dwie sekundy.
- Po dwóch sekundach zakryć karty z użyciem klasy 'hidden', która narzuca na kartę czarne tło.
Mój pomysł na te dwa punkty był taki:
const cardsColor = ['red','red', 'yellow','yellow',
'lime', 'lime', 'indigo', 'indigo',
'aqua', 'aqua', 'peru', 'peru',
'green', 'green', 'purple', 'purple',
'cadetblue', 'cadetblue'];
const cardsColorLength = cardsColor.length;
let allCards = document.querySelectorAll('div');
allCards = [...allCards];
const cardsAmount = allCards.length;
let initializeGame = new Promise((resolve, reject) => {
let randomDiv = () => Math.floor(Math.random()*cardsAmount);
cardsColor.forEach(element => {
let random = randomDiv();
while (allCards[random].classList.length === 1) random = randomDiv(); //aby nie przypisywało klasy dwa razy do tej samej karty
allCards[random].classList.add(element);
resolve('Game generated...');
});
});
initializeGame
.then(() => {setTimeout(() => {
allCards.forEach(element => element.classList.add('hidden'));
console.log('Great, let\'s play!');
}, 2000);
});
(po załadowaniu program inicjuje przypisanie kolorów do kart, po czym zwraca status obietnicy jako spełnionej, co uruchamia procedurę zakrycia kart).
Całość działa bez zarzutu, natomiast mocno zastanawia mnie, czy to właśnie takie użycie obietnicy jest tym właściwym.
Bardzo proszę o wyjaśnienie w miarę zrozumiałym językiem.
Z góry dziękuję.