我是ES6和Node.js的新手
我想了解回调函数如何在同步环境和异步环境中工作。
我尝试在Node中运行以下内容:
function func1() {
console.log('hello');
}
func1(function(){
console.log('world');
});
根据我对异步回调的理解,func1应首先执行,当func1完成执行时,它会在其参数列表中回调函数。
所以在这种情况下:
console.log('world')
应该在第二位执行,但我只能作为输出:hello
。
我错过了什么吗?有人可以用清楚的例子向我解释回调是如何工作的吗?在同步环境中是否相同?
答案 0 :(得分:2)
您应该首先检查func1()
功能:
function func1() {
console.log('hello');
}
最重要的是要认识到它需要零参数。结果是你传递给它并不重要。例如:
func1("world")
func1(1)
func1(false)
func1(function (){console.log('world)}
所有这些都完全相同,因为func1()
忽略作为参数传入的所有内容。
如果您想要传递回调,那么不会忽略其参数的函数就是您需要的,因为它们需要使用该回调执行某些操作。所以接受回调的函数应该有一个更像这样的签名:
function func1(some_argument){
// do something with argument
}
如果您期望该参数是一个函数,那么自然要做的就是执行它:
function func1(some_function){
// call that function
some_function()
}
因此,对于您的示例,您最终会得到:
function func1(callback) {
console.log('hello');
callback()
}
func1(function(){
console.log('world');
});
这将导致两个console.log()
s。
此外,由于它在标题中,因此没有任何异步。
答案 1 :(得分:1)
因此,当您运行malloc
时,您实际上正在传递未命名或匿名的'作为func1(function(){...})
的参数。但是,要充当回调,您需要显式执行它。
func1
在其他节点库中,开发人员很可能会处理您为其功能提供的回调,这就是他们工作的原因。
希望这有帮助!