实现一个控制请求并发函数 withConcurrency, 当前同一时间发出的请求数量不超过指定参数 max 的值。 function request(options) {       setTimeout(() => {         options.success && options.success(`data from ${options.url}`);         options.complete && options.complete();       }, 2000)     }     /*     request({       url: string,       success: function() {},       complete: function() {}     })     */     function withConcurrency() {       // code here     };     request = withConcurrency(request, { max: 2 });     // 如上参数所示,同一时间只能发出 1 和 2 的请求。     // 1 和 2 同时发送,3 和 4 排队。     // 1 和 2 有响应后,3 、4 再去补位。     request({       url: ‘/api/1’     })     request({       url: ‘/api/2’     })     request({       url: ‘/api/3’     })     request({       url: ‘/api/4’     }) 要求: 假设现在已有现成的模拟 request 发送请求工具函数,该请求函数只支持success、complete 的 callback 回调。 如 demo 代码里 withConcurrency 参数所示,同一时间只能发出 /api/1 和 api/2 的请求,同时 /api/3 和 api/4 排队,当 1 和 2 里任意请求有响应时候(无论成功或者失败),排队的请求再去补位,但正在处理的请求数量不能超过参数 max 值。

区块链毕设网qklbishe.com为您提供问题的解答

实现一个控制请求并发函数 withConcurrency, 当前同一时间发出的请求数量不超过指定参数 max 的值。
    function request(options) {       setTimeout(() => {         options.success && options.success(`data from ${options.url}`);         options.complete && options.complete();       }, 2000)     }      /*     request({       url: string,       success: function() {},       complete: function() {}     })     */       function withConcurrency() {       // code here     };       request = withConcurrency(request, { max: 2 });      // 如上参数所示,同一时间只能发出 1 和 2 的请求。     // 1 和 2 同时发送,3 和 4 排队。     // 1 和 2 有响应后,3 、4 再去补位。     request({       url: '/api/1'     })     request({       url: '/api/2'     })     request({       url: '/api/3'     })     request({       url: '/api/4'     })

要求:

  1. 假设现在已有现成的模拟 request 发送请求工具函数,该请求函数只支持success、complete 的 callback 回调。
  2. 如 demo 代码里 withConcurrency 参数所示,同一时间只能发出 /api/1 和 api/2 的请求,同时 /api/3 和 api/4 排队,当 1 和 2 里任意请求有响应时候(无论成功或者失败),排队的请求再去补位,但正在处理的请求数量不能超过参数 max 值。

function withConcurrency(request, options = { max: 2 }){
    const queue = [];
    let currentRunning = 0;

    function run(){
        if (currentRunning < options.max) {
            currentRunning += 1;
            const task = queue.shift();
            if (task) {
                const rawComplete = options.complete;
                task.complete = function () {
                    currentRunning -= 1;
                    rawComplete && rawComplete();
                    run();
                }
                request(task)
            }
        }
    }

    function newRequest(options){
        queue.push(options);
        return run();
    }

    return newRequest;
}

57:09

以上就是关于问题实现一个控制请求并发函数 withConcurrency, 当前同一时间发出的请求数量不超过指定参数 max 的值。 function request(options) {       setTimeout(() => {         options.success && options.success(`data from ${options.url}`);         options.complete && options.complete();       }, 2000)     }     /*     request({       url: string,       success: function() {},       complete: function() {}     })     */     function withConcurrency() {       // code here     };     request = withConcurrency(request, { max: 2 });     // 如上参数所示,同一时间只能发出 1 和 2 的请求。     // 1 和 2 同时发送,3 和 4 排队。     // 1 和 2 有响应后,3 、4 再去补位。     request({       url: ‘/api/1’     })     request({       url: ‘/api/2’     })     request({       url: ‘/api/3’     })     request({       url: ‘/api/4’     }) 要求: 假设现在已有现成的模拟 request 发送请求工具函数,该请求函数只支持success、complete 的 callback 回调。 如 demo 代码里 withConcurrency 参数所示,同一时间只能发出 /api/1 和 api/2 的请求,同时 /api/3 和 api/4 排队,当 1 和 2 里任意请求有响应时候(无论成功或者失败),排队的请求再去补位,但正在处理的请求数量不能超过参数 max 值。的答案

欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。

区块链NFT链游项目方科学家脚本开发培训

承接区块链项目定制开发

微信:btc9767

QQ :1330797917

TELEGRAM: BTCOK9

承接区块链项目定制开发


qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 实现一个控制请求并发函数 withConcurrency, 当前同一时间发出的请求数量不超过指定参数 max 的值。 function request(options) {       setTimeout(() => {         options.success && options.success(`data from ${options.url}`);         options.complete && options.complete();       }, 2000)     }     /*     request({       url: string,       success: function() {},       complete: function() {}     })     */     function withConcurrency() {       // code here     };     request = withConcurrency(request, { max: 2 });     // 如上参数所示,同一时间只能发出 1 和 2 的请求。     // 1 和 2 同时发送,3 和 4 排队。     // 1 和 2 有响应后,3 、4 再去补位。     request({       url: ‘/api/1’     })     request({       url: ‘/api/2’     })     request({       url: ‘/api/3’     })     request({       url: ‘/api/4’     }) 要求: 假设现在已有现成的模拟 request 发送请求工具函数,该请求函数只支持success、complete 的 callback 回调。 如 demo 代码里 withConcurrency 参数所示,同一时间只能发出 /api/1 和 api/2 的请求,同时 /api/3 和 api/4 排队,当 1 和 2 里任意请求有响应时候(无论成功或者失败),排队的请求再去补位,但正在处理的请求数量不能超过参数 max 值。