【发布时间】:2016-10-06 11:46:52
【问题描述】:
我有这个功能:
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 次调用结束后,我想在我的函数中调用 expect。所以这意味着我必须等待它结束,就像这样:
setIntervalX(() => {
//logic here
}, 1000, 10).then(() => {
expect(something).toBe(anotherThing);
});
我觉得我这样做的方式很丑陋,可以做得更好。有什么建议吗?
【问题讨论】:
-
好的,我重新格式化了,你现在能帮忙吗:)?
-
尊重,但请看上面。您真的会称其为“一致且可读”的格式吗?
callback在第一个代码块中未对齐,具有误导性;第一个块在其他方面仍然具有不一致的缩进;关于第二个代码块的说法越少越好。使您的帖子和代码清晰,并证明您花时间这样做,可以提高您获得好的答案的机会。 -
如果这是一个测试,为什么要以 1 秒的间隔将它们分开,而不是让它们背靠背运行?从您的问题中也不清楚
callback是否可以返回一个承诺,即有效地表示一个异步操作,以及执行时间是否少于一秒(意味着测试按顺序执行),或者更多(它们最终同时执行即并行)。澄清这一点可能会成为一个更好的问题。 -
“通话已结束”是什么意思?如果您只是想在第 10 次通话被触发后恢复,那么
setTimeout(something, 10000)似乎就足够了。
标签: javascript typescript promise rxjs