setTimeout(function() {
console.log(111)
}, 0);
setTimeout(function() {
console.log(333)
}, 1000);
new Promise(function(resolve){
console.log(444);
resolve();
console.log(555);
}).then(function(){
console.log(666);
});
console.log(777);
async function test1() {
console.log("test1");
await test2();
console.log("test1 last");
}
async function test2() {
console.log("test2");
}
test1();
输出结果:
444
555
777
test1
test2
666
test1 last
111
333
理解:
1、首先执行同步代码,然后以事件轮询的方式执行异步代码;
2、promise中的异步体现在.then()和.catch()中,而promise中的function里的是同步代码;
3、上面的代码是先执行promise里的同步代码,然后执行脚本里本身的代码;
4、async无论方法是同步还是异步都可以用async关键字来进行标识;
【promise与setTimeout的执行顺序问题】5、因为用async标识只是显示表明在该方法内,可能会用到awaitu关键字使其变为异步方法,而且将该异步方法进行了明确的划分,只有用了await关键字时才是异步操作,其余一并为同步操作;
6、同generator函数一样,async函数返回一个promise对象,可以使用.then()方法添加回调函数;
7、当函数执行的时候,一旦遇到await就先返回,等到触发的异步操作完成,再接着执行函数体内后面的语句;
8、await命令后面的promise对象,运行结果可能是rejected,所以最好把await命令放在try……catch代码块中;
推荐阅读
- 操作系统|[译]从内部了解现代浏览器(1)
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- vue.js|vue中使用axios封装成request使用
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- JavaScript|JavaScript之DOM增删改查(重点)
- javascript|vue使用js-xlsx导出excel,可修改格子样式,例如背景颜色、字体大小、列宽等
- javascript|javascript中的数据类型转换