字节前端

记一道控制并发数的前端面试题【转掘金】

2019-03-13  本文已影响0人  企鹅的技术笔记

记一道控制并发数的前端面试题【手动维护 HTTP 请求排队】

题目

原文来自掘金https://juejin.im/post/5c88aaa05188257e1f2925a8, 只是记录一下自己的写法, 据说是头条的

image
 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 方法, 不过这确实是我下意识第一反应了

保存一个不被污染的队列, 不就是闭包吗?!

上一篇下一篇

猜你喜欢

热点阅读