我有许多调用API端点的方法。每个端点都需要一个长度限制为100的id数组。我经常要对这些端点进行多次调用(由于设计不良等),因为我有大约400个批次。所以在这个例子中我最终不得不将id分成4组并发出4个请求。
我有一些低级方法,只使用superagent发出HTTP请求:
getProducts (ids, token) {
return Request
.send({ ids : ids })
}
其中有一些很少,我讨厌将它们全部更改为将ID分成几组,而是返回一系列请求。
我的想法,如果看起来很糟糕的话就打电话给我,就是创建一种可以拦截一个电话的包装器,将id分解为一组并返回一组请求。也许有些东西:
var chunk = function (op) {
return _.wrap(op, function (func, interceptor) {
var args = interceptor(_.drop(arguments, 1));
return func.apply(this, args);
});
}
我所坚持的是如何使用此方法首先生成集合然后再生成请求。如果我想保留getProducts的签名,似乎很难做到。
var requests = chunk(getProducts);
还有其他一些针对这种方法的技术,还是只是简单的疯狂?我对任何替代技术持开放态度。
答案 0 :(得分:0)
function multiRequest(ids, token) {
var CHUNK_SIZE = 100;
var requests = [];
for (var i = 0; i < ids.length; i += CHUNK_SIZE) {
requests.push(getProducts(ids.slice(i, i + CHUNK_SIZE)));
}
return requests;
}
您可以像调用getProducts
一样调用它,它会返回一组请求,这些请求被分成100个ID组。