实现一个控制请求并发函数 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: 'api1' }) request({ url: 'api2' }) request({ url: 'api3' }) request({ url: 'api4' }) 要求: 假设现在已有现成的模拟 request 发送请求工具函数,该请求函数只支持success、complete 的 callback 回调。 如 demo 代码里 withConcurrency 参数所示,同一时间只能发出 api1 和 api2 的请求,同时 api3 和 api4 排队,当 1 和 2 里任意请求有响应时候(无论成功或者失败),排队的请求再去补位,但正在处理的请求数量不能超过参数 max 值。
输入描述:
输入:第一个参数是 request 函数,第二个参数是 object, 里面有 max 值,表示当前正在处理的请求数量不能超过 max 个数。withConcurrency(request, options = {max: 2})


输出描述:
输出: 返回一个新函数,返回的函数能控制当前正在处理请求的数量。 request = withConcurrency(request, { max: 2 })
示例1

输入

{"url":"/api/yyyyy"}

输出

1
加载中...