题目
有多个并发请求时,实现一个请求完成后,再请求下一个。实现间隔1s按顺序打印出1、2、3、4。以下提供部分代码!
function request(x) {
return new Promise(resolve => {
const timer = setTimeout(() => {
console.log(x)
resolve(x)
clearTimeout(timer)
}, 1000)
})
}
function service() {
// 补全
}
service(1)
service(2)
service(3)
service(4)
作答:
function request(x) {
return new Promise(resolve => {
const timer = setTimeout(() => {
console.log(x)
resolve(x)
clearTimeout(timer)
}, 1000)
})
}
// 节流
const delay = (function () {
let timer = 0
return function (callback, ms) {
clearTimeout(timer)
timer = setTimeout(callback, ms)
}
})()
// 实现promise队列
const queue = []
function promiseQueue(list) {
let sequence = Promise.resolve()
list.forEach((item) => {
sequence = sequence.then(item)
})
return sequence
}
function service(x) {
queue.push(() => request(x))
delay(() => {
promiseQueue(queue)
}, 10)
}
service(1)
service(2)
service(3)
service(4)