ES6 和 Node 中的同步和异步回调函数
Synchronous and Asynchronous callback functions in ES6 and Node
我是 ES6 的新手并且 Node.js
我想了解回调函数在同步环境和异步环境下是如何工作的。
我尝试 运行 在 Node 中执行以下操作:
function func1() {
console.log('hello');
}
func1(function(){
console.log('world');
});
根据我对异步回调的理解,func1应该先执行,当func1执行完成后,它会回调其参数列表中的函数。
所以在这种情况下:
console.log('world')
应该排在第二位,但我只得到一个输出:hello
。
我错过了什么吗?有人可以用清晰的例子向我解释回调是如何工作的吗?在同步环境中是否相同?
因此,当您 运行 func1(function(){...})
时,您实际上是将未命名或 'anonymous' 函数作为参数传递给 func1
。但是,要用作 回调,您需要显式执行它。
function func1(fn) {
console.log('hello');
fn();
}
func1(function(){
console.log('world');
});
在其他节点库中,开发人员很可能处理您为其函数提供的回调,这就是它们工作的原因。
希望对您有所帮助!
您应该首先检查 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()
。
此外,因为它在标题中,所以这里没有任何异步操作。
我是 ES6 的新手并且 Node.js
我想了解回调函数在同步环境和异步环境下是如何工作的。
我尝试 运行 在 Node 中执行以下操作:
function func1() {
console.log('hello');
}
func1(function(){
console.log('world');
});
根据我对异步回调的理解,func1应该先执行,当func1执行完成后,它会回调其参数列表中的函数。
所以在这种情况下:
console.log('world')
应该排在第二位,但我只得到一个输出:hello
。
我错过了什么吗?有人可以用清晰的例子向我解释回调是如何工作的吗?在同步环境中是否相同?
因此,当您 运行 func1(function(){...})
时,您实际上是将未命名或 'anonymous' 函数作为参数传递给 func1
。但是,要用作 回调,您需要显式执行它。
function func1(fn) {
console.log('hello');
fn();
}
func1(function(){
console.log('world');
});
在其他节点库中,开发人员很可能处理您为其函数提供的回调,这就是它们工作的原因。
希望对您有所帮助!
您应该首先检查 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()
。
此外,因为它在标题中,所以这里没有任何异步操作。