节点JS回调以异步方式执行

时间:2016-10-13 05:44:10

标签: node.js callback

我在节点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,处理回调然后代码继续。代码继续应该先执行。为什么它等待回调完成。

1 个答案:

答案 0 :(得分:1)

您编写的代码不是异步的,通常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