2016-04-07 3 views
1

Ich habe eine Reihe von Methoden, die auf eine API-Endpunkte aufrufen. Jeder Endpunkt erwartet ein Array von IDs mit einer Längenbeschränkung von 100. Meistens muss ich mehrere Aufrufe an diese Endpunkte machen (wegen schlechtem Design usw.), weil ich Chargen von ungefähr 400 habe. In diesem Beispiel habe ich also am Ende um die IDs in 4 Sätze zu zerlegen und 4 Anfragen zu stellen.Intercept-Methode Aufrufargumente mit JavaScript

ich einige geringe Methoden, die einfach die HTTP-Anforderung mit Superagenten machen:

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

Es gibt ein fair paar von ihnen und ich verabscheue sie alle die IDs in Gruppen aufteilen zu ändern und Stattdessen geben Sie ein Array von Anfragen zurück.

Meine Idee und rufen Sie mich an, wenn es wie eine schlechte scheint, war eine Art Wrapper erstellen, die einen Anruf abfangen kann, brechen Sie die ID in Sätze und geben Sie stattdessen ein Array von Anfragen zurück. Vielleicht etwas entlang der Linien von:

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

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

Was ich bin fest ist, wie ich diesen Ansatz verwenden würde, um zuerst die Sätze zu erzeugen und dann die Anfragen. Es scheint sehr schwierig zu sein, wenn ich die Signatur von getProducts erhalten möchte.

var requests = chunk(getProducts); 

Gibt es eine andere Technik, die auf diesem Ansatz ausgerichtet ist, oder ist dies einfach nur verrückt? Ich bin offen für alternative Techniken.

Antwort

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

können Sie das nennen wie Sie getProducts nennen, und es wird eine Reihe von Anfragen aufgeteilt in Gruppen von 100 IDs zurück.

+0

Danke für die Antwort! Was ich jedoch vermeiden wollte, war, dass ich den Code oben (oder ähnlich) in all meinen Methoden wiederholen musste. Ich habe ungefähr 10, die auf diese Weise arbeiten müssen. – backdesk