Ich habe eine Schleife von 100 Versprechen. Ich möchte 10 davon gleichzeitig verarbeiten, dann eine Aussage drucken und mit den nächsten 10 parallel fortfahren. Es wartet jedoch nicht auf alle 10 Versprechen, ihre Ausführung zu beenden.JavaScript/TypeScript - Schleife der Versprechen wartet nicht
const promises = [];
for (let i = 1; i <= 100; i ++) {
const blockPromise = this.web3.eth.getBlock(i).then((block: any) => {
winston.info("Processing block " + i);
}).catch((err: Error) => {
winston.error(err);
});
promises.push(blockPromise);
if (i % 10 === 0) {
Promise.all(promises).then(() => {
winston.info("+++ Processed " + 10 + " blocks");
}).catch((err: Error) => {
winston.error(err);
});
}
Meine Erwartung ist, so etwas wie:
Processing block 1
Processing block 3
Processing block 7
Processing block 2
Processing block 4
Processing block 5
Processing block 6
Processing block 9
Processing block 10
Processing block 8
+++ Processed 10 blocks
Processing block 12
...
Jedoch wird es chaotisch durcheinander. Was mache ich falsch? Jede Hilfe wird geschätzt.
Sie müssen die 'Promise.all' aus Ihrer Schleife verschieben, da Ihre Versprechen mehrere Male aufgerufen werden, wenn Sie das Array der Versprechen füllen. – 3Dos
Wenn ich 'Promise.all' außerhalb der Schleife anrufe, verarbeitet es alle 100 von ihnen parallel, oder? Was ich will, ist nur 10 parallel zu bearbeiten, dann eine andere Aktion, dann wieder 10 parallel, und so weiter – phoebus
Sie können 'Promise.all' nicht mit einer Callback-Methode innerhalb einer' for-Schleife' verwenden und erwarten '' -loop warten Sie könnten 'async/await' verwenden, um das zu tun. – Danmoreng