您好我正在学习node.js中的异步函数但我不明白为什么我的代码阻塞即使我使用回调。 这是我的代码。
function isPerfectNumber(num, callback) {
var sum = 0;
for( var i = 1; i<=(num/2); i++ )
if( num%i == 0 ) {
sum += i;
}
if( sum == num ) {
callback(num);
}
}
exports.getNPerfectNumbers = function(n) {
var count = 0;
var i = 1;
while(count<n) {
isPerfectNumber(i, function(result) {
console.log(result);
count++;
});
i++;
}
}
答案 0 :(得分:0)
以下是异步处理与JavaScript协同工作的方式:
JavaScript将立即执行其当前堆栈上的所有指令。其中一些说明可能会将代码放入JavaScript的event loop(例如,setTimeout
函数)。一旦JavaScript完成在当前堆栈上执行其所有指令,它就会检查事件循环以查看是否有任何内容正在等待执行。
了解event loop,您可能会回答自己的问题。
为什么回调可以同步:
正如@KevinB所说,仅仅因为你使用回调并不意味着它是异步执行的。 JavaScript是一种灵活的语言,允许您编写代码imperatively or declaratively(允许使用functional programming范例),这是由于JavaScript函数是第一类对象。