一、Pomise.all的使用 常见使用场景 :多个异步结果合并到一起 Promise.all可以将多个Promise实例包装成一个新的Promise实例。用于将多个Promise实例,包装成一个新的Promise实例。 1.它接受一个
一、Pomise.all的使用
常见使用场景 : 多个异步结果合并到一起
Promise.all可以将多个Promise实例包装成一个新的Promise实例。用于将多个Promise实例,包装成一个新的Promise实例。
1.它接受一个数组作为参数。
2.数组可以是Promise对象,也可以是其它值,只有Promise会等待状态改变。
3.当所有的子Promise都完成,该Promise完成,返回值是全部值的数组。
4.如果有任何一个失败,该Promise失败,返回值是第一个失败的子Promise的结果。
Promise.all([p1,p2,p3])
先举例之前我们 如果有多个异步请求,但是最终用户想要得到的是 多个异步结果合并到一起,用之前代码举例
console.log(‘start‘); var result1,result2=""; //settimeout 模拟异步请求1 setTimeout(() => { result1="ok1" }, 2000); //settimeout 模拟异步请求2 setTimeout(() => { result1="ok2" }, 3000); //等待 异步1 异步2结果 var tempInterval= setInterval(()=>{ if(result1&&result2){ console.log(‘data result ok ,,, clearInterval‘) clearInterval(tempInterval); } },100)
使用Promise.all来解决 ,上代码
let p1 = new Promise((resolve, reject) => { resolve(‘成功了‘) }) let p2 = new Promise((resolve, reject) => { resolve(‘success‘) }) let p3 = Promse.reject(‘失败‘) Promise.all([p1, p2]).then((result) => { console.log(result) //[‘成功了‘, ‘success‘] }).catch((error) => { console.log(error) }) Promise.all([p1,p3,p2]).then((result) => { console.log(result) }).catch((error) => { console.log(error) // 失败了,打出 ‘失败‘ })
二、Pomise.race的使用
类似于Promise.all() ,区别在于 它有任意一个返回成功后,就算完成,但是 进程不会立即停止
常见使用场景:把异步操作和定时器放到一起,如果定时器先触发,认为超时,告知用户
let p1 = new Promise((resolve, reject) => { setTimeout(() => { resolve(‘成功了‘) }, 2000); }) let p2 = new Promise((resolve, reject) => { setTimeout(() => { resolve(‘success‘) }, 5000); }) Promise.race([p1, p2]).then((result) => { console.log(result) //[‘成功了‘, ‘success‘] }).catch((error) => { console.log(error) })
Promise.race
这个方法比较特别,在执行多个异步操作中,只保留取第一个执行完成的异步操作的结果,其他的方法仍在执行,不过执行结果会被抛弃。
结合着不同的用法,可以更好的把握异步执行的顺序。