本文深入解析JavaScript中处理循环内异步操作的常见陷阱及解决方案。针对异步for循环导致的变量共享问题,详细对比了async/await同步等待机制与递归调用实现顺序执行的两种核心思路,帮助开发者避免数据错乱,确保异步任务按序完成。
案例:
compute.exec()是一个异步方法,用于执行具体的业务逻辑。在这种情况下,控制台打印的结果往往显示为300, 300, 300。这是因为异步for循环并未等待异步操作返回Promise对象,当异步回调执行时,循环变量i的值已经迭代至300。
function getMoney(){
var money=[100,200,300]
for(let i=0; i<money.length; i++){
compute.exec().then(()=>{
console.log(money[i])
})
}
}一、async/await 处理思路
async function getMoney(){
var money=[100,200,300]
for( let i=0; i<money.length; i++){
await compute.exec().then(()=>{
console.log(money[i])
})
}
}
// async告诉getMoney方法里面存在异步的操作
// await放在具体异步操作(方法)前面,意思是等待该异步返回Promise才会继续后面的操作二、递归处理思路
function getMoney(i) {
var money=[100,200,300]
compute.exec().then(() => {
if ( i < money.length ) {
console.log(money[i]);
i++;
getMoney(i);
}
});
}
getMoney(0);//开始调用
//用递归来实现自我循环(具体循环在then里面,可以确保前面的compute.exec()的异步操作完成).then()是返回了Promise对象为resolve后才进行的(可以了解一下Promise对象)总结
到此这篇关于Javascript处理循环的异步操作的文章就介绍到这了,更多相关Javascript循环异步操作内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!