一、宏任务和微任务容易混淆(针对我个人)
结果:25413
解释:
setTimeout是宏任务,promise的then是微任务。
本轮执行宏任务之后,执行本轮的微任务,之后再进行下一轮的宏任务执行。
resolve(3)其实就是在执行then()
1. 宏任务放入1
2. 打印2
3. 宏任务放入resolve(3),当该宏任务执行完之后执行resolve对应的then
4. 微任务放入4
5. 打印5
所以:25413
二、return 问题(该题出处:https://www.jianshu.com/p/802fc5801db4)
var p1 = Promise.resolve(42)
p1.then((value)=>{
//第一种情况,返回一个Promise
return new Promise(function(resolve,rejected){
resolve(value+1)
})
//第二种情况,返回一个值
return value+2;
//第三种情况,新建一个promise,使用reslove返回值
const p2 = new Promise(function(resolve,rejected){
resolve(value+3)
})
//第四种情况,新建一个promise,使用return返回值
const p2 = new Promise(function(resolve,rejected){
return(value+4)
})
//第五种情况,没有返回值
return undefined
}).then((value)=>{
console.log(value)
})
第一种情况,新建promise的resolve传出的值将作为then方法返回的promise的resolve的值传递出,console将打印出43
第二种情况,return的值将作为then方法返回的promise的resolve的值传递出,console将打印出44
第三种情况,虽然新建了promise,但对于then方法来说,没有向它返回的promise传递返回值,console将打印出undifined
第四种情况,同第三种情况,
第五种情况,then方法没有返回值,then方法的promise的resolve的值将传递出undifined。
以上三、四、五种情况,其实都是一样的问题,构造then方法的函数没有向then方法返回的promise对象的resolve方法传递值。因此resolve返回的都是undfined