JavaScript等待异步执行完成
等待顺序执行(不用)
const asyncUppercase = item => new Promise(resolve => setTimeout( ()=> resolve(item.toUpperCase()), Math.floor(Math.random()*1000) ) ) const uppercaseItems = async () =>{ const items = [a,b,c]; for(item of items){ const uppercaseItem = await asyncUppercase(item); console.log(uppercaseItem) } console.log(异步执行完成) } uppercaseItems();
等待不用顺序执行(用这个) 数组方法不能直接使用,要使用promise.all ,回调函数
const aysncUppercase = item => new Promise(resolve => setTimeout( ()=> resolve(item.toUpperCase()), Math.floor(Math.random()*1000) ) ); const uppercaseItems = () =>{ const items = [a,b,c]; return Promise.all( items.map(async item =>{ const uppercaseItem = await aysncUppercase(item); console.log(uppercaseItem) }) ).then(()=>{ console.log(all执行完成) } ) } uppercaseItems();
数组方法,使用回调将导致代码的其余部分执行,并且无法等待异步操作。不能用
const asyncUppercase = item => new Promise(resolve => setTimeout( () => resolve(item.toUpperCase()), Math.floor(Math.random() * 1000) ) ); const uppercaseItems = async () => { const items = [a, b, c]; await items.forEach(async item => { const uppercaseItem = await asyncUppercase(item); console.log(uppercaseItem); }); console.log(Items processed); }; uppercaseItems(); // LOGS: Items processed, B, A, C
上一篇:
IDEA上Java项目控制台中文乱码