Ich habe diese Funktion:weiter zum nächsten Schritt nur, wenn die Funktion 10 Mal ausgeführt wurde
function setIntervalX(callback, delay, repetitions): Promise<any> {
let promises = [];
var x = 0;
var intervalID = window.setInterval(function() {
callback();
if (++x === repetitions) {
window.clearInterval(intervalID);
promises.push(new Promise((resolve, reject) => {});
}
}, delay);
return Promise.all(promises);
}
Mein Ziel ist es, eine Funktion in Test aufrufen und die nach diesen 10 Anrufe beendet haben, möchte ich erwarten anrufen in meiner Funktion. Das heißt also, dass ich muss warten, bis es zu Ende, wie folgt aus:
setIntervalX(() => {
//logic here
}, 1000, 10).then(() => {
expect(something).toBe(anotherThing);
});
Ich glaube, dass meine Art und Weise, dies zu tun ist hässlich, und kann bettery erfolgen. Irgendwelche Vorschläge?
ok, ich habe es umformatiert, wirst du jetzt helfen :)? –
Mit Respekt, aber siehe oben. Würden Sie das wirklich "konsistent und lesbar" formatiert nennen? "Callback" ist im ersten Codeblock falsch ausgerichtet, was irreführend ist; dieser erste Block weist auf andere Weise immer noch eine inkonsistente Einrückung auf; und je weniger über den zweiten Codeblock gesagt wird, desto besser. Wenn Sie Ihren Beitrag und Code klarstellen und zeigen, dass Sie sich die Zeit dafür genommen haben, verbessern Sie Ihre Chancen, gute Antworten zu erhalten. –
Wenn dies ein Test ist, warum werden sie mit einem Intervall von 1 Sekunde abgegrenzt, anstatt sie nur hintereinander auszuführen? Es ist auch nicht klar aus Ihrer Frage, ob "Callback" eine Zusage zurückgeben kann, dh effektiv eine asynchrone Operation darstellt, und ob es weniger als eine Sekunde dauert (dh die Tests werden nacheinander ausgeführt) oder mehr (sie werden gleichzeitig ausgeführt) dh parallel). Dies zu klären könnte eine bessere Frage sein. – jib