我只是尝试一个简单的回调来让代码按顺序执行而不是异步执行。这不起作用:
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中执行此操作的最佳方法吗?
答案 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);