当前第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)
})
|
有了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 | 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)
let res2 = await request2
console.log(res2, new Date() - startTime)
})()
|
更多编程相关知识,请访问:编程视频!!
以上就是JavaScript如何处理并行请求?四种方式浅析的详细内容,更多文章请关注木庄网络博客!
返回前面的内容
相关阅读 >>
bootstrap请求javascript失败是怎么回事
javascript中日期如何转为时间戳
javascript中如何产生两个随机数
js如何获取session中的值
深入浅析 promise 比 settimeout() 快的原因
javascript中怎么改字体颜色
javascript怎么隐藏表格
js怎么设置css实现隐藏
javascript未知错误怎么查
javascript中变量是什么
更多相关阅读请进入《javascript》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » JavaScript如何处理并行请求?四种方式浅析