我在节点js中有这段代码
var PrintFirstName = function(first_name , cb) {
cb("First name is "+first_name) ;
}
PrintFirstName("Tushar" , function(res){
for(var i = 0 ; i < 100000; i++) {
console.log(i);
}
console.log("processing callback");
});
console.log("Code continue....") ;
由于回调本质上是异步的,我期望的执行顺序应该是Code continue,编号1-10000,然后处理回调
但是如果我运行上面的代码,我得到的输出是数字1-10000,处理回调,然后代码继续。代码继续应该首先执行。为什么等待回调完成
你写的代码不是异步的,javascript中的异步函数通常需要手动构造setTimeout或setInterval的表达式参数。
在你的例子中:
var PrintFirstName = function(first_name , cb) {
cb("First name is "+first_name) ;
}
PrintFirstName("Tushar" , function(res){
for(var i = 0 ; i < 100000; i++) {
console.log(i);
}
setTimeout(function() { console.log("processing callback");}, 0);
});
console.log("Code continue....") ;
但请记住,当调用Object方法时,这将不起作用
看这里http://devedge.primedirective.net/toolbox/examples/2003/CCallWrapper/index.html