制作一个长期工作的异步nodejs

时间:2017-03-28 07:22:36

标签: javascript node.js asynchronous

我是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函数来验证来自客户端请求的输入。我希望它是异步运行的,但似乎它是同步运行的

2 个答案:

答案 0 :(得分:2)

  

如何在异步中运行长时间工作?

您可以计划要异步启动的工作,但是当它稍后启动时,它仍将占用Node运行JavaScript代码的唯一线程。也就是说,你只是稍后阻止线程,而不是现在。同步工作是同步工作。

假设这不是您想要做的,您有两个主要选择:

  1. 将工作分解成更小的部分并异步安排每个部分,这样就可以让其他操作穿插处理这些工作。

  2. 将作品卸载到child process

答案 1 :(得分:1)

您是否考虑从主应用程序中删除此长时间运行的任务?一个好的设计是创建另一个节点应用程序,一个工作人员,它将完成此任务(PDF生成,图像处理等)完全分离。两个应用程序之间的通信将使用队列完成。

通过这种方式,您还可以更好地扩展应用。

关于SOA和微服务的精彩帖子:https://blog.risingstack.com/why-you-should-start-using-microservices/