Add queueing to angulars $http service

前端 未结 6 1477
迷失自我
迷失自我 2020-12-07 17:24

I have a very quirky api that can only handle a single request at a time. Therefore, I need to ensure that every time a request is made, it goes into a queue, and that queue

6条回答
  •  佛祖请我去吃肉
    2020-12-07 17:36

    My two queues:

    1. Sequential queue QueueHttp: executes requests one after the other

    code:

    app.factory('QueueHttp', ($http, $q) => {
        let promise = $q.resolve();
    
        return (conf) => {
            let next = () => {
                return $http(conf);
            };
    
            return promise = promise.then(next);
        };
    });
    

    usage:

    return QueueHttp({
               url: url,
               method: 'GET'
           });
    
    1. Delay queue DelayHttp: executes requests by a delay amount

    code:

    app.factory('DelayHttp', ($http, $timeout) => {
        let counter = 0,
            delay = 100;
    
        return (conf) => {
            counter += 1;
    
            return $timeout(() => {
                counter -= 1;
                return $http(conf);
            }, counter * delay);
        };
    });
    

    usage:

    return DelayHttp({
               url: url,
               method: 'GET'
           });
    

提交回复
热议问题