我期望输出:A,B,C.但这不起作用.假设函数handleClick(element)无法更改,如何更改其他函数以确保所有代码按顺序执行并按预期输出A,B,C?
async function handleClick(element) {
setTimeout(function(){
console.log(`Click on Element_${element}`);
}
, Math.random(5)*1000);
}
async function clickLetter(letter) {
await handleClick(letter);
}
async function clickGroup(group) {
await handleClick(group);
}
const letters = ['A', 'B', 'C'];
function clickLetters(letters, fn) {
let index = 0;
return new Promise(function(resolve, reject) {
function next() {
if (index < letters.length) {
fn(letters[index++]).then(next, reject);
} else {
resolve();
}
}
next();
});
}
clickLetters(letters, clickLetter);
解决方法:
setTimeout函数是异步的,结果将立即返回,您需要将其包装在promise构造函数中,然后对其进行解析.
function handleClick(element) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(`Clicked on Element_${element}`);
resolve();
}, Math.random(5) * 1000);
});
}
async function clickLetter(letter) {
await handleClick(letter);
}
async function clickGroup(group) {
await handleClick(group);
}
const letters = ['A', 'B', 'C'];
async function clickLetters(letters, fn) {
for(let i = 0; i < letters.length; i++) {
await clickLetter(letters[i]);
}
}
clickLetters(letters, clickLetter);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。