JS 同时获取多个异步请求数据 Promise.all()


普通接口调用写法.then() 或者 使用es6的 async/await 异步转同步

//   function Index() {
//       普通调用嵌套写法
//       console.time()
//       const p1 = new Promise((resolve, reject) => {
//         console.log('这里是p1')
//         setTimeout(() => {
//           resolve('这里是p1的返回')
//         }, 1000)
//       }).then((r1) => {
//         new Promise((resolve, reject) => {
//           console.log('这里是p2')
//           setTimeout(() => {
//             resolve('这里是p2的返回')
//           }, 1000)
//         }).then((r2) => {
//           console.log(r1)
//           console.log(r2)
//           console.timeEnd()
//         })
//       }) 
//     }
 
//异步转同步
async function Index2() {
      console.time()
      const p1 =await new Promise((resolve, reject) => {
        console.log('这里是p1')
        setTimeout(() => {
          resolve('这里是p1的返回')
        }, 1000)
      })
      const p2 =await new Promise((resolve, reject) => {
        console.log('这里是p2')
        setTimeout(() => {
          resolve('这里是p2的返回')
        }, 1000)
      })
      console.log(p1)
      console.log(p2) 
      console.timeEnd()
   }
    //Index();
    Index2();

用时2

 使用Promise.all()来实现调用

  async function Index() {
      console.time()
      const p1 = new Promise((resolve, reject) => {
        console.log('这里是p1')
        setTimeout(() => {
          resolve('这里是p1的返回')
        }, 1000)
      })
      const p2 = new Promise((resolve, reject) => {
        console.log('这里是p2')
        setTimeout(() => {
          resolve('这里是p2的返回')
        }, 1000)
      })
      Promise.all([p1, p2]).then((val) => {
        console.log(val)
        console.timeEnd()
      })
       //当然也可以使用 async/await写法
       /*   
        const p = await Promise.all([p1, p2])
        console.log(p);
        console.timeEnd(); 
        */
       //补充说明:如果我们的接口已经套上了一层 promise 便已经实现了同时执行异步的条件
       //下面这种写法耗时和Promise.all也是一样的,但是嵌套多了可能代码就不太优雅了
       /*  p1.then((r1) => {
        p2.then((r2) => {
          console.log(r1)
          console.log(r2)
          console.timeEnd()
        })
      }) */
        
    }
    Index()

用时1s

相关