<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Promise</title>
</head>
<body>
<script type="text/javascript">
/**
* new Promise 接收一个function作为参数,
* function中有两个回调函数作为参数,
* 一个成功的回调函数,一个是失败的回调函数
* **/
var p3 = new Promise(function(resolve, reject) {
setTimeout(() => {
resolve('3秒钟结束了')
}, 3000)
})
var p5 = new Promise(function(resolve, reject) {
setTimeout(() => {
resolve('5秒钟结束了')
}, 5000)
})
var p2 = new Promise(function(resolve, reject) {
setTimeout(() => {
resolve('2秒钟结束了')
}, 2000)
})
p3.then(r => console.log(r))
p5.then(r => console.log(r))
p2.then(r => console.log(r))
//Promise的链式调用 then中的回调函数可以接收上一次then的返回值
p2.then(r => {
console.log(r)
return 'aaa'
}).then(c => console.log(c))
//Promise.all 它是以数组作为对象
// 当数组中的所有Promise都执行完毕之后才执行then
// 返回的数据是每个Promise对象数据组成的数组,结果是按照参数顺序执行的
// Promise.all([p2,p3,p5]).then(res=>console.log(res))
function promiseAll(arr) {
let newArr = []
return new Promise((resolve,reject)=>{
arr.forEach((item,index) => {
item.then(r => {
newArr.push(r)
let flag = newArr.every(v=>v!=null)
if(newArr.length==arr.length && flag){
resolve(newArr)
}
})
})
})
}
promiseAll([p2, p5, p3]).then(r=>console.log(r))
</script>
</body>
</html>
试图封装一个Promise.all方法
最新推荐文章于 2023-03-14 10:28:21 发布