为什么这不是异步的?

时间:2015-05-11 09:42:42

标签: javascript node.js asynchronous io callback

我试图在nodeJS中获取我的回调。我以为我把它们弄下来,直到我看到以下例子:

 function async(callback) {
    for(var i = 0; i < 10; i++) {
    } 
    callback();    
}


async(function() {
    console.log('Expected 2nd Printout');
});

console.log('Expected 1st Printout');

我对节点和回调的理解是在调用异步函数之后,&#34;预期的第一个打印输出&#34;当我们等待异步功能完成执行然后&#34;预期的第二个打印输出&#34;它会在完成后打印出来。但是,在执行这个简单的程序时,会发生相反的情况。

我认为这是因为这是一个处理任务,而不是async函数正在等待文件或监听某些网络响应的情况,程序是以程序方式而不是异步方式运行的?

1 个答案:

答案 0 :(得分:1)

您可以使用process.nextTick()使您的函数异步。官方文件: https://nodejs.org/docs/latest/api/process.html#process_process_nexttick_callback

  

当前事件循环转为完成后,调用回调函数。这不是setTimeout(fn,0)的简单别名,它效率更高。它在事件循环的后续滴答中触发任何其他I / O事件(包括定时器)之前运行。

还尝试google“了解Node.js事件循环”,有很多文章可以帮助您了解幕后发生的事情。

运行此代码:

function async(callback) {
    process.nextTick( function() {
        for(var i = 0; i < 10; i++) {
            console.log('i = ' + i);
        } 
        callback();
    });
}

async(function() {
    console.log('Expected 2nd Printout');
});

console.log('Expected 1st Printout');