ES6和Node中的同步和异步回调函数

时间:2017-10-28 01:12:14

标签: node.js asynchronous callback ecmascript-6 synchronous

我是ES6和Node.js的新手

我想了解回调函数如何在同步环境和异步环境中工作。

我尝试在Node中运行以下内容:

function func1() { 
    console.log('hello'); 
}

func1(function(){ 
    console.log('world');
}); 

根据我对异步回调的理解,func1应首先执行,当func1完成执行时,它会在其参数列表中回调函数。

所以在这种情况下:

console.log('world') 

应该在第二位执行,但我只能作为输出:hello

我错过了什么吗?有人可以用清楚的例子向我解释回调是如何工作的吗?在同步环境中是否相同?

2 个答案:

答案 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

在其他节点库中,开发人员很可能会处理您为其功能提供的回调,这就是他们工作的原因。

希望这有帮助!