Promise.all()

Promise.all([Promise数组:「要求数组中的每一项尽可能都是Promise实例」]):返回一个新的Promise实例AA,
AA成功还是失败,取决于数组中的每一个Promise实例是成功还是失败,只要有一个失败,AA就是失败的,只有都成功AA才是成功的。
使用场景:并行,初始化同时发送多个请求,等所有信息都请求回来后,做处理
并行:10个请求都成功后,在做处理叫并行,速度快
串行:第一个请求成功才能发第二个,第二个请求成功后才能发第三个

  1. function fn(interval){
  2. return new Promise((resolve, reject)=>{
  3. setTimeout(()=>{
  4. resolve(interval)
  5. },interval)
  6. })
  7. }
  8. let p1 = fn(3000)
  9. let p2 = fn(1000)
  10. let p3 = Promise.resolve(0)
  11. Promise.all([]).then(result =>{
  12. // 不论谁先知道状态,最后结果的顺序和传递数组的顺序保持一致
  13. console.log(result)
  14. }.catch(reason =>{
  15. // 处理过程中,遇到一个失败,则all立即为失败,结果就是当前实例失败的原因
  16. console.log(reason)
  17. }))
  18. // 需求实例:
  19. // api1,api2,api3 api1的返回结果作为api2的的请求实例,api2作为api3的请求实例
  20. // 基于Promise
  21. const api1 = () =>{
  22. return new Promise(resolve =>{
  23. $.ajax({
  24. url: '/api1',
  25. auccess(result1){
  26. resolve(result1)
  27. }
  28. })
  29. })
  30. }
  31. const api2 = () =>{
  32. return new Promise(resolve =>{
  33. $.ajax({
  34. url: '/api2',
  35. auccess(result2){
  36. resolve(result2)
  37. }
  38. })
  39. })
  40. }
  41. const api2 = () =>{
  42. return new Promise(resolve =>{
  43. $.ajax({
  44. url: '/api2',
  45. auccess(result3){
  46. resolve(result3)
  47. }
  48. })
  49. })
  50. }
  51. // 串行请求
  52. api1.then(result1 =>{
  53. return api2()
  54. }).then(result2 =>{
  55. retuen api3()
  56. }).then(result3 =>{
  57. })
  58. // 并行请求
  59. Promise.all([api1(), api2(), api3()]).then(result =>{
  60. })
  61. // es7 async await 串行 异步请求
  62. (async function(){
  63. let result1 = await api1();
  64. let result2 = await api2();
  65. let result3 = await api3();
  66. })()

Promise.race

最先知道状态的Promise实例是成功还是失败,决定了AA是成功还是失败
使用场景:需要向10个接口发请求,哪一个访问最快就优先以谁处理