javascript - 如何对打字稿中的循环应用时间限制
问题描述
我有一个如下所示的循环。
let currentResult = []
for(let i = 0; i < maxIterations; i++) {
currentResult = someComputation(...)
if(endingCondition) {
break
}
}
return currentResult
我不仅想要迭代限制,还想要时间限制。
我知道我可以用它Date.now()
来获取开始时间,然后检查每次迭代后经过了多长时间。
但是,它会在完成当前迭代后停止,这意味着它会稍微超出时间限制。
我想要的是settimeout
,当时间结束时,它只是返回currentResult
并放弃正在进行的迭代。
解决方案
通过利用生成器函数,您可以实现可以在中间停止的函数:
function limited(time, fn) {
return function(...args) {
const it = fn(...args), start = Date.now();
while(Date.now() - start < time) {
const { value, done } = it.next();
if(done) return { value };
}
return { terminated: true };
}
}
const longComputation = limited(1000, function* () {
while(true) {
yield; // < breaking point for safe termination
}
});
for(let i = 0; i < maxIterations; i++) {
const { result, terminated } = longComputation(...);
if(terminated) {
break
}
}
推荐阅读
- javascript - 如何让 GLTFLoader 在三个 js 中工作
- c# - 如何根据注入的服务和服务的 Mock 对应用程序进行集成测试?
- sql - Heroku postgres 错误尝试制作数据剪辑
- python - 如何将多行折叠成一行并创建一系列列元素 Python Pandas
- java - 如何安排应用程序执行
- android - 使用 Expo react native (android) 收听 FCM 推送通知传递
- ruby-on-rails - Rswag 嵌套属性语法
- javascript - 如何使用passportJS切换用户配置文件
- java - 删除映射条目会导致映射条目中的对象引用可选更改
- javascript - 使用 React 测试库进行测试时输入不会更新