围绕Node.js中的回调问题

时间:2013-01-27 23:23:39

标签: javascript node.js

我只是尝试一个简单的回调来让代码按顺序执行而不是异步执行。这不起作用:

function fn1(string, func){
    console.log("hello");
    func();
};

function fn2(){
    console.log("world");
}

fn1("meaninglessString", fn2());

它实际上打印“world”然后“hello”到控制台然后崩溃。但这样做:

function fn1(string, func){
    console.log("hello");
    func();
};

fn1("meaninglessString", function(){
    console.log("world");
});

我是否必须始终在调用fn1时编写回调函数代码,或者有没有办法引用已编写的函数?另外,如果我只想让一个函数在另一个函数完成后发生,这是在Node.js中执行此操作的最佳方法吗?

2 个答案:

答案 0 :(得分:6)

看看你的最后一行:

fn1("meaninglessString", fn2());

它应该是以下内容:

fn1("meaninglessString", fn2);

包含括号会导致fn2立即执行。

答案 1 :(得分:2)

在你的第一个街区,你有:

fn1("meaninglessString", fn2());

这表示“使用参数调用fn1”无意义的字符串“以及调用没有参数的fn2的结果”。因此,解释器会调用fn2并从中获取任何内容,它将“world”打印为biproduct,然后使用参数“meaninglessString”调用fn1并且undefined打印“hello”并调用一个尚未执行的函数设置(未定义)因此崩溃。

如果您更改代码以传递函数而不是调用函数的结果,则它将按预期工作

function fn1(string, func){
    console.log("hello");
    func();
};

function fn2(){
    console.log("world");
}

fn1("meaninglessString", fn2);