【发布时间】:2020-06-20 20:17:20
【问题描述】:
我正在尝试在 NestJs 中创建异步任务。我希望在向某个控制器发出一个请求后,我的异步任务开始你的长时间工作,而循环,然后节点/嵌套进程钢能够回答其他控制器的其他请求。
但是当异步循环开始时,Nest 的所有其他端点都被冻结,直到异步任务完成。
我已经尝试过使用setTimeout()、setInterval()、setIntermmediate()、queueMicrotask() 和Promise.resolve()
我的代码:
// Async task:
private checkTime(baseTime: number, startTimeStamp: number){
while(true){
const elapsedTime = Date.now() - startTimeStamp
console.log(`Elapsed time: ${elapsedTime}`)
if(elapsedTime > baseTime){
console.log(`Time excced!`)
break;
}
}
}
我已经尝试过类似的方法:
queueMicrotask(() => this.checkTime(edge.baseTime, startedTimeStamp))
setTimeout(() => this.checkTime(edge.baseTime, startedTimeStamp), 0)
【问题讨论】:
-
您应该能够只对长时间运行的任务使用异步函数,并且仍然能够处理其他请求。
while(true)内存占用极快! -
感谢您的回答。只需要我将 async 放入我的
checkTIme吗?您对我可以“观察”某些事情直到发生某些事情有一些建议吗?像秒表 -
Shahrukh 的回答是可行的。你可以使用 Promises 来“等待”某事直到它完成。您的长期运营是什么?如果是加载一个大文件,我会选择 Promises。
标签: javascript node.js asynchronous nestjs