记一道控制并发数的前端面试题【转掘金】
2019-03-13 本文已影响0人
企鹅的技术笔记
记一道控制并发数的前端面试题【手动维护 HTTP 请求排队】
题目
image原文来自掘金https://juejin.im/post/5c88aaa05188257e1f2925a8, 只是记录一下自己的写法, 据说是头条的
function sendRequest(urls, max, callback) {
const url_queue = urls.slice();
return {
push(url) {
url_queue.push(url);
this.send();
},
send() {
if (url_queue.length === 0) {
callback();
}
console.log('send');
const handle_url_queue = url_queue.slice(0, max);
const handle_length = handle_url_queue.length;
let i = handle_length;
if (handle_length) {
handle_url_queue.forEach((url) => {
fetch(url)
.then(() => {
i--;
if (i === 0) {
url_queue.splice(0, handle_length);
if (url_queue.length === 0) {
callback();
} else {
this.send();
}
}
})
})
}
}
}
}
我这个似乎不特别的符合题意...还需要调用返回的 send 方法, 不过这确实是我下意识第一反应了
保存一个不被污染的队列, 不就是闭包吗?!