У меня есть эта функция:Перейдите к следующему шагу только тогда, когда функция была запущена в 10 раз
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);
}
Моя цель заключается в вызове функции в тесте и кормовой эти 10 вызовов закончились, я хочу позвонить ожидать в моей функции. Так это значит, что я должен ждать его до конца, как это:
setIntervalX(() => {
//logic here
}, 1000, 10).then(() => {
expect(something).toBe(anotherThing);
});
Я чувствую, что мой способ сделать это некрасиво, и может быть сделано Bettery. Какие-либо предложения?
Хорошо, я отформатировал его, вы поможете сейчас :)? –
С уважением, но посмотрите на выше. Вы действительно называете это «последовательно и читаемо» отформатированным? 'callback' смещается в первом блоке кода, что вводит в заблуждение; этот первый блок также по-прежнему содержит несогласованные отступы другими способами; и чем меньше говорят о втором блоке кода, тем лучше. Изменив свой пост и код и продемонстрировав, что вы нашли время для этого, улучшите свои шансы получить хорошие ответы. –
Если это тест, почему вы проводите интервалы с интервалом в 1 секунду вместо того, чтобы просто запускать их назад? Из вашего вопроса также неясно, может ли «обратный вызов» вернуть обещание, т. Е. Эффективно представляет асинхронную операцию, и требуется ли меньше секунды для выполнения (что означает, что тесты выполняются последовательно) или более (они в конечном итоге выполняются одновременно т.е. параллельно). Уточнение этого может сделать его более правильным. – jib