我想运行以下功能: 如果条件得到解决 1)添加课程 2)睡4秒然后删除课程 3)然后使用return停止运行功能。
function sleep(time) {
return new Promise(resolve => {
setTimeout(resolve, time)
})
}
function playGame() {
if (counter === 3) {
Promise.resolve().then(function () {
message.classList.add('winner');
sleep(2500).then(function () {
message.classList.remove('winner');
});
});
return;
}
...
}
如果我运行此代码,函数当然会立即返回。如何将回报添加到承诺链。
答案 0 :(得分:1)
这应该有效:
Promise.resolve()
.then(function () {
message.classList.add('winner');
})
.then(sleep(2500))
.then(function() {
message.classList.remove('winner');
});
这应该是不言自明的。随意根据需要提出更多问题。
编辑:Oooops似乎我太快回答了这个问题。你永远不能推迟javascript中的“return”语句。在您的情况下,您的代码或我的代码立即执行,并且立即调用封闭函数的return
,并且执行返回到事件循环。 然后,调用promise的第一个 then()等等......
由于你不能推迟函数的返回,你可以使用回调或更好的Promises来链接事件:
function playGame() {
return Promise.resolve() // note the return !
.then(function () {
message.classList.add('winner');
})
.then(sleep(2500))
.then(function() {
message.classList.remove('winner');
});
}
...then
playGame()
.then(function() {
// this code is called after playGame's Promise has been executed
});
// this code is called when playGame ends, ie immediately, and before any promises code
换句话说:一旦你开始拥有异步代码(通过回调或承诺),每个进一步的代码也需要由promises驱动。