javascript - 制作一个长时间工作的异步nodejs

标签 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 时,“test”始终在“main”之前打印,这意味着长时间工作同步运行。 那么,如何以异步方式运行长时间工作?

编辑

https://www.dropbox.com/s/32b0nwwr6r0x2zk/jsonschemavalidator.js?dl=0

我创建了一个 validateAndConvert 函数来验证客户端请求的输入。我希望它是异步运行的,但似乎它是同步运行的

最佳答案

how do I run long-work in async?

您可以安排异步启动的工作,但是当稍后启动时,它仍然会占用 Node 运行 JavaScript 代码的唯一线程。也就是说,您将稍后而不是现在阻塞线程。同步工作就是同步工作。

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

  1. 将工作分解为更小的部分,并异步安排每个部分,这样您就可以在处理这些工作时散布其他操作。

  2. 将工作卸载到 child process .

关于javascript - 制作一个长时间工作的异步nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43063081/

相关文章:

javascript - 获取网页的颜色直方图

javascript - 如何切换添加删除数组中同一位置的多个项目?

javascript - 如何通过dockerfile在ENTRYPOINT之前执行shell命令

node.js - Node 呈现的 HTML 文件未找到相对路径脚本

Javascript Async.js Parallel 不适用于 socket.io

javascript - Node.js:crypto.pbkdf2 十六进制密码

node.js - Web oneSignal 的静默推送通知

angularjs - 是否可以将 Angular 2 Dart 前端与 Node.js 后端一起使用?

mysql - 我想检查数组中的任何值是否在数据库中

ios - 在iOS中创建调度组时,事件指示器未设置动画