2016-04-07 14 views
1

API uç noktalarına çağrı yapan bir çok yöntem var. Her uç nokta, 100'lük bir uzunluk sınırı olan bir dizi id'in beklemesini bekler. Daha sık olmamakla birlikte, bu uç noktalara (kötü tasarım vb. Nedeniyle) birden fazla çağrı yapmak zorundayım çünkü yaklaşık 400'lük partilerim var. Bu yüzden bu örnekte, kimlikleri 4 kümeye bölmek ve 4 istek yapmak. JavaScript kullanarak yöntem çağrı bağımsız değişkenlerini durdurun

Sadece superagent kullanarak HTTP isteği bazı düşük seviyeli yöntemleri var:

getProducts (ids, token) { 
    return Request 
     .send({ ids : ids }) 
} 

Orada bu adil bir kaçıdır ve kümeler halinde kimlikleri bölmek hepsini değiştirmek nefret ediyorum ve bunun yerine bir dizi istek döndürür.

Benim fikrim ve eğer beni kötü bir şekilde görüyorsanız, bir çağrıyı kesip ayırabilen, id kümelerini kümelere ayırabilen ve bunun yerine bir dizi istek döndüren bir sarıcı türünü oluşturmak gibiydi. çizgisinde Belki bir şey:

var chunk = function (op) { 
    return _.wrap(op, function (func, interceptor) { 
     var args = interceptor(_.drop(arguments, 1)); 

     return func.apply(this, args); 
    }); 
} 

Ne şaşırıp Ben ilk önce setleri ve istekleri oluşturmak için kullandığı yöntem şekli şöyledir. Eğer getProducts imzasını korumak istiyorsam yapmak gerçekten zor görünüyor.

var requests = chunk(getProducts); 

Bu yaklaşıma yönelik başka bir teknik var mı yoksa bu sadece delilik mi? Alternatif tekniklere açığım.

cevap

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; 
} 

Az önce getProducts çağrı gibi bu çağırabilir ve istekleri dizisi 100 kimlikleri gruba ayrılmıştır dönecektir.

+0

Yanıtladığınız için teşekkür ederiz! Bundan kaçınmaya çalıştığım şey, tüm yöntemlerimde yukarıdaki (veya benzeri) kodu tekrarlamak zorundaydı. Bu şekilde çalışması gereken yaklaşık 10 tane var. – backdesk

İlgili konular