JavaScript如何处理并行请求?四种方式浅析


当前第2页 返回上一页

generator使用co函数

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

const co = require('co')

const startTime = new Date().getTime()

function request (time) {

  return new Promise(resolve => {

    setTimeout(() => {

      resolve(time)

    }, time)

  })

}

co(function* () {

  let request1 = request(3000);

  let request2 = request(2000);

  let res1 = yield request1

  let res2 = yield request2

  console.log(res1, res2, new Date() - startTime) // 3000 2000 3001

})

有了co函数,就不需要生成it和执行next方法了; co的原理其实也简单,就是递归执行next,直到done为true; 如果next返回的value是Promise,则在then函数中执行next,若不是Promise,直接执行next函数 下面是co函数的简版手写实现

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

function co(func) {

  let it = func()

  let t = it.next()

  next()

   

  function next() {

    if (t.done) return

    if (t.value instanceof Promise) {

      t.value.then(res => {

        t = it.next(res)

        next()

      })

    } else {

      t = it.next(t.value)

      next()

    }

  }

}

方法四

有了generator,很容易想到async/await,毕竟async/await就是由generator实现的

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

// setTimeout模拟异步请求,time为请求耗时

const startTime = new Date().getTime()

function request (time) {

  return new Promise(resolve => {

    setTimeout(() => {

      resolve(time)

    }, time)

  })

}

(async function () {

  let request1 = request(3000)

  let request2 = request(2000)

  let res1 = await request1

  console.log(res1, new Date() - startTime) // 3000 3001

  let res2 = await request2

  console.log(res2, new Date() - startTime) // 2000 3005

})()

更多编程相关知识,请访问:编程视频!!

以上就是JavaScript如何处理并行请求?四种方式浅析的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

html里js怎么使用

javascript的技术特性是什么

javascript中this的用法是什么

javascript语言的组成有哪些

javascript事件捕获与事件冒泡

360如何打开javascript

浅谈javascript中检查数组是否包含指定值的几种方法

vue框架是什么

学学javascript如何截取视频第一帧

自动清理js、css文件的缓存方法

更多相关阅读请进入《javascript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...