let openCards = [];
function cardActions(card) {
// prevent function from adding two classes over and over again
if (!(card.classList.contains('open'))) {
// display the card's symbol
card.className += ' open';
card.className += ' show';
// add card to list of open cards
openCards.push(card);
if(openCards.length === 2) {
if(openCards[0].innerHTML === openCards[1].innerHTML) {
// add the match class
Array.from(openCards).forEach(function(card){
card.className += ' match';
});
console.log('match');
// empty open cards
openCards = [];
} else {
Array.from(openCards).forEach(function(card) {
// add the mismatch class
card.className += ' mismatch';
});
在程序的这一点上我计划在用户已经查看它们时将卡片翻转过来。
所以我做的是创建一个名为flip的asyn函数。我在里面等待睡眠以暂停程序执行,但我所做的只是接收'睡眠未定义'错误。
我不确定为什么会发生这种情况,因为睡眠功能是在翻转功能中定义的。
// flip cards around
async function flip() {
await sleep(2000);
Array.from(openCards).forEach(function(card) {
card.classList.remove('mismatch')
card.classList.remove('open');
card.classList.remove('show');
});
}
// give user time to look at the cards
flip();
console.log('these dont match');
// empty open cards
openCards = [];
}
}
}
}
答案 0 :(得分:2)
承诺比setTimeout
更容易处理。如果你想使用你正在描述的sleep
之类的东西,那么定义一个函数,它返回一个在输入的ms之后解析的Promise:
const sleep = ms => new Promise(res => setTimeout(res, ms));
(async () => {
console.log('1');
await sleep(500);
console.log('2');
await sleep(1500);
console.log('3');
})();

它使代码比使用setTimeout
和回调更平坦。
答案 1 :(得分:1)
https://developer.mozilla.org/ro/docs/Web/API/window.setTimeout
而不是await sleep(2000);
sleep不是本机停止程序,但你可以使用setTimeout
使用
window.setTimeout(() => {
Array.from(openCards).forEach(function(card) {
card.classList.remove('mismatch')
card.classList.remove('open');
card.classList.remove('show');
});
}, 2000);
或没有箭头功能
console.log('1');
window.setTimeout(() => {
console.log('2');
}, 2000);
console.log('3');