Je dois diviser un gros fichier en centaines de téléchargements et téléchargez ces cartes téléchargées vers le serveur.
Comment puis-je contrôler le nombre de requêtes de téléchargement avec 5 demandes au plus simultanément? p>
3 Réponses :
Si vous souhaitez limiter les téléchargements sur 5 demandes simultanées, vous pouvez peut-être utiliser async.maplimit code>
; Exemple:
async.mapLimit(this.uploadParts, 5, (part, onDone) => { axios.post(/* ... */) // or whatever API you want to use .then((res) => onDone(undefined, res)) .catch(onDone) }, (err, results) => { // if err is undefined, then results is an array of // responses, or whatever you called your onDone callback // with. });
Je suis vraiment désolé. La 3ème partie libère n'est pas autorisée dans ce projet.
Regardez ensuite le code source et essayez de le comprendre. Comprendre le code derrière Asyncjs est une très bonne chose de toute façon.
Que diriez-vous de distribuer vos données parmi quelques sacs, puis de commencer à télécharger chaque sac:
p>
let N = 347 // total record count let M = 5 // number of bags you want // let me mock your data real quick... let data = Array(N) for(var i = 0; i < N; i++){ data[i] = i } // create bags... let bagSize = N / M let bags = Array(M) for(var i = 0; i < M; i++) { let bag = data.slice(i*bagSize, (i+1)*bagSize) bags[i] = bag // ...and use immediately bag.map(uploadPart => doUpload) } // ... or later
Ceci est similaire à l'étranglement. Vous devriez pouvoir trouver quelques bibliothèques dans NPM en recherchant la "promesse de manette des gaz" ou "limite de promesse". Ce sont quelques-uns j'ai trouvé:
Sorte de confusion sur la logique complexe. Permettez-moi de passer plus de temps sur votre solution. Merci beaucoup
@newbike je viens de dire ça comme exemple. Bien que j'ai eu une unité testée ce qui précède, vous ferez probablement mieux d'utiliser l'une des bibliothèques que j'ai liées à ou une autre que vous trouvez sur NPM.
Qu'est-ce que tu as essayé jusque-là?
async.maplimit code>
peut être utile d'aide .Est-ce que cela répond à votre question? Comment exécuter "x" promesses en parallèle JavaScript