JS 异步编程与Promise,还有async与await实例详解
宏任务与微任务
- 宏任务,例如定时器。
- 微任务,例如Promise。Promise生产微任务,多个微任务依次执行。只有改变状态才会产生微任务。
- 微任务优先宏任务执行。
JS中任务处理的顺序
同步的任务>微任务(Promise)>宏任务(定时器)
then
Promise和then是配套出现的,then是对上一个Promise状态改变的处理。每个then返回的其实也是一个Promise。
then返回值的处理技巧:后面的then就是对前面返回的promise的处理。
后台异步请求封装成Promise
各种异步请求的方式
Promise默认返回成功
Promise.then也是一个Promise
简单的Promise小例子
<script>
//pending 准备阶段
//resolved 成功状态
//rejected 拒绝状态
new Promise((resolve,reject)=>{
reject("拒绝状态");
//resolve("操作成功")
}).then(
value => {
console.log("成功业务处理");
},
reason => {
console.log("拒绝的业务处理");
}
);
</script>
在宏任务内部创建的微任务,宏任务的任务处理顺序优先微任务,因为微任务是在宏任务执行过程当中创建出来的。如下
<script>
let promise = new Promise(resolve => {
setTimeout(() => {
console.log("setTimeout");
resolve();
},0);
console.log("test1");
}).then(value => console.log("操作成功"));
console.log("test2");
</script>
//控制台输出顺序为:
//test1
//test2
//setTimeout
//操作成功