模拟一个场景:多个tab页,有个关闭所有tab的功能,这时候我们按照tab列表的顺序每隔120毫秒(关闭动画的时间)以此关闭tab页面。
代码:
let tabs = ['tab1', 'tab2', 'tab3','tab4'];
let closeTab = tabName => {
console.log('关闭 ' + tabName);
}
let closeAsyncTab = async tabName => {
return new Promise(resolve => {
setTimeout(() => {
closeTab(tabName);
resolve();
}, 120);
})
}
let closeTabList = async () => {
for(let i=0;i<tabs.length;i++)
await closeAsyncTab(tabs[i])
}
closeTabList();
分析:
1.主要就是利用js的异步(async和await)来进行实现的顺序执行;
2.使用async标记的标记的函数,会要求返回一个Promise。如果代码里面不写return new Promise它也会默认返回一个Promise,例如 return 1 他会直接转变为 return Promise.resolve(1);
3.在使用await等待时,被等待的方法必须使用async声明,同时也要求当前方法也要声明async。
这样的目的是不被耗费时间长的方法阻塞“主线程”(此处还涉及到浏览器的事件循环)。