文章目录
前言
问题发生在一个下午,当我正在实现Promise.all()方法的时候(有兴趣的可以去我另一篇博客看一看:深入透析Promise的all和race方法),发现for循环里的函数并不是同步执行的,那么我如果想让它同步执行该怎么办呢?
大家先来看一下这道题:
for(let i = 0;i < 5;i++) {
if(i === 1) {
setTimeout(() => {
console.log(i);
}, 0);
}else {
console.log(i);
}
}
执行结果:
这里便是宏任务与微任务的问题啦,不懂的同学可以去看一下事件循环知识哦!
我们发现1被推到了最后才去执行,那么我就想让他同步执行,也就是按顺序执行该怎么办呢?
- 思路一:给函数包一层Promise,然后用async await使其同步执行。(这样还得给它而外包裹一层promise,不是多次一举吗?)
- 思路二:使用Generator
话不多说,让我们一起来看一看吧
一、async await实现
async await和promise的内容本文就不具体讲了,直接上代码!
const promise= (i) => new Promise((resolve,reject) => {
setTimeout(() => {
// 此处resolve目的是为了让promise结束,否则await将一直等待
resolve()
console.log(i);
}, 0);
})
~(async (resolve,reject) => {
for(let i = 0;i < 5;i++) {
if(i === 1){