这可能没有最伟大的标题。我试图理解回调函数,我想知道如何在不丢失 for 循环的情况下替换以下代码中的提示()?
for(i=0;i<4;i++){
let x = prompt("Input an integer");
// store input into an array
}
我尝试过类似的事情:
for(let i = 0; i<4; i++){
let x = document.getElementById("someId");
x.addEventListener("click", rcvInput(function(i){
if(i == 3){
x.removeEventListener("click", rcvInput)
}
}));
}
function rcvInput(callback){
//store input into an array
callback();
}
我知道这可以在没有 for 循环的情况下完成,我更好奇回调是否能够暂停循环并等待输入?
根据您的最终目标是什么,我很确定有更好的方法来做到这一点。但为了做到这一点:
您可以创建一个方法,返回一个在单击发生时解析的承诺。然后你可以使用async
/await
做你需要做的事。
通过使用Promise
and await
正在使用它,您可以从技术上“暂停”您的for
循环直到有事情发生。在本例中,单击一下。
记住包含的方法for
循环必须是async
.
function getClick() {
return new Promise(acc => {
function handleClick() {
document.removeEventListener('click', handleClick);
acc();
}
document.addEventListener('click', handleClick);
});
}
async function main() {
for (let i=0;i<4;i++) {
console.log("waiting for a click", i);
await getClick();
console.log("click received", i);
}
console.log("done");
}
main();
尝试一下这个plunkr https://plnkr.co/edit/ADzvLiJmn38Mmp0ipu2u?p=preview.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)