我试图在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函数正在等待文件或监听某些网络响应的情况,程序是以程序方式而不是异步方式运行的?
答案 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');