setTimeout(() => {
//执行后 回调一个宏事件
console.log('内层宏事件3')
}, 0)
console.log('外层宏事件1');
new Promise((resolve) => {
console.log('外层宏事件2');
resolve()
}).then(() => {
console.log('微事件1');
}).then(()=>{
console.log('微事件2')
})
我们看看打印结果
外层宏事件1
外层宏事件2
微事件1
微事件2
内层宏事件3
发现原来会一直向下执行,我也没有return呀,真是奇怪
new Promise((resolve) => {
console.log('外层宏事件2');
resolve()
}).then(() => {
console.log('微事件1');
// return 1;
}).then(ans=>{
console.log(ans);//undefine
console.log('微事件2')
})
这应该跟函数的机制一样没有返回值,所以输出undefined
到第二层时应该时return 而不是resolve
new Promise((resolve) => {
console.log('外层宏事件2');
resolve()
}).then((res) => {
console.log('微事件1');
return 1;
}).then((res)=>{
console.log(res);//1
console.log('微事件2')
})
实现Promise.all方法
function diPromiseAll(promises){
return new Promise((resolve, reject)=>{
// 参数判断
if(!Array.isArray(promises)){
throw new TypeError("promises must be an array")
}
let result = [] // 存放结果
let count = 0 // 记录有几个resolved
promises.forEach((promise, index) => {
promise.then((res)=>{
result[index] = res
count++
count === promises.length && resolve(result) // 判断是否已经完成
}, (err)=>{
reject(err)
})
})
})
}