2

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

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 中执行此操作的最佳方式吗?

4

2 回答 2

6

看看你的最后一行:

fn1("meaninglessString", fn2());

它应该是以下内容:

fn1("meaninglessString", fn2);

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

于 2013-01-27T23:26:05.797 回答
2

在您的第一个区块中,您有:

fn1("meaninglessString", fn2());

这表示“使用参数调用 fn1 “meaninglessString”以及不使用参数调用 fn2 的结果”。因此,解释器执行它调用 fn2 并从中得到任何回报,它将“world”打印为副产品,然后使用参数“meaninglessString”和 undefined 调用 fn1,后者打印“hello”并调用尚未被调用的函数set(undefined) 因此它崩溃了。

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

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

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

fn1("meaninglessString", fn2);
于 2013-01-27T23:36:02.407 回答