promist.all()
Promise其他常用函数,Promise.all()
批量执行
Promise.all([p1,p2,p3,...])用于将多个Promise实例,包装成有一个新的Promise实例。
返回的实例就是普通的Promise
接受一个数组作为参数。
数组里可以是Promise对象,也可以是别的值,只有Promise会等待状态改变。
当所有子Promise都完成,该Promise完成,返回值是全部值得数组。
有任何一个失败,该Promise失败,返回值是第一个失败的子Promise的结果。
promise常用函数
promise.all()
promiseAll
error
first reject error
all resolve values
Promise.all()并发请求
Promise.all()
Promise.all()
code:
运行结果:
console.log('go') Promise.all([1,2,3]) .then(all => { console.log('1: ', all)//注意正确写法,console一个字符串一个数组,而不需要+号将二者连城字符串 return Promise.all([()=>{ console.log('oooo')//这里,因为三个参数都是非promise且非thenable的。all会默认执行promise.resolve将其转为promise状态,且resolved状态。而这个函数也只是数组第零项,如果不调用,里边的console也不会执行 }, '0000', false]); }) .then(all =>{ console.log('2: ', all) // 这里原先写错为console.log('2: '+all), // 最后输出的是 /* 2: ()=>{ console.log('oooo')//这里,默认执行promise.resolve时,console是否执行? },0000,false */ // 这么一个字符串了 let p1 = new Promise(resolve=>{ setTimeout(()=>{ resolve('i,am p1'); },1000) }) let p2 = new Promise(resolve=>{ setTimeout(()=>{ resolve('i,m p2') }, 2000) }) let p3 = new Promise((resolve,reject)=>{ setTimeout(()=>{ reject('i,m p3') }, 3000) }) return Promise.all([p1,p2,p3]); }) .then(all=>{ console.log('end all:' + all) }) .catch(err=>{console.log('Error: '+err)}) // 自测答案 // 立即执行 // go // 1: [1,2,3] // * return [()=>{console.log('oooo')}, '0000', false] // 2: [()=>{console.log('oooo')}, '0000', false] // 3秒后 // * return reject 'i,m p3'//(因为p1,p2,p3三个promise实例,在all中,因为p3是reject状态,all遇到后立马返回该reject状态和值) // console err i,m p3
一、promise.all():批量执行
1、Promise.all([p1, p2, p3, …])用于将多个promise实例,包装成一个新的promise实例。
2、返回的实例就是普通promise
3、它接收一个数组作为参数。
4、数组里可以是promise对象,也可以是别的值,只有promise对象会等待状态改变。
5、当所有子promise都完成,该promise完成,返回值是全部值的数组。
6、有任何一个失败,该promise失败,返回值是第一个失败的子promise的结果
Promise.all()
promise.all()
一、promise.all():批量执行
1、Promise.all([p1, p2, p3, …])用于将多个promise实例,包装成一个新的promise实例。
2、返回的实例就是普通promise
3、它接收一个数组作为参数。
4、数组里可以是promise对象,也可以是别的值,只有promise对象会等待状态改变。
5、当所有子promise都完成,该promise完成,返回值是全部值的数组。
6、有任何一个失败,该promise失败,返回值是第一个失败的子promise的结果。