我是nodejs的新手。 在我的程序中,我需要解决长时间的异步问题。 我尝试了我的代码:
function testAsync(callback){
//do long-work
for(var i=0;i<1000000000;i++){
//do-nothing, just pseudo a long work
}
//callback
callback();
}
testAsync(function(){
console.log("test");
});
console.log('main');
但是当我运行testAsync时,&#34; test&#34;总是在&#34; main&#34;之前打印,这意味着长时间工作同步运行。 那么,我如何在异步中运行长时间工作?
修改
https://www.dropbox.com/s/32b0nwwr6r0x2zk/jsonschemavalidator.js?dl=0
我创建了一个validateAndConvert函数来验证来自客户端请求的输入。我希望它是异步运行的,但似乎它是同步运行的
答案 0 :(得分:2)
如何在异步中运行长时间工作?
您可以计划要异步启动的工作,但是当它稍后启动时,它仍将占用Node运行JavaScript代码的唯一线程。也就是说,你只是稍后阻止线程,而不是现在。同步工作是同步工作。
假设这不是您想要做的,您有两个主要选择:
将工作分解成更小的部分并异步安排每个部分,这样就可以让其他操作穿插处理这些工作。
将作品卸载到child process。
答案 1 :(得分:1)
您是否考虑从主应用程序中删除此长时间运行的任务?一个好的设计是创建另一个节点应用程序,一个工作人员,它将完成此任务(PDF生成,图像处理等)完全分离。两个应用程序之间的通信将使用队列完成。
通过这种方式,您还可以更好地扩展应用。
关于SOA和微服务的精彩帖子:https://blog.risingstack.com/why-you-should-start-using-microservices/