我读到回调是在其余逻辑完成后触发的函数,如下所示:
function withCallback(argument, callback) {
doSomethingWithParams(argument);
callback():
}
但是据我所知,这些回调都需要声明为完全相同,没有通用的方法可以每次都将回调放置在任何地方?我想我的问题是:回调在技术上是特殊的,还是只是在另一个函数的末尾声明并执行的函数的常规名称?
答案 0 :(得分:3)
关于回调没有什么特别的;它们只是函数(在JavaScript中)。术语“回调”用于表示调用者提供的功能在接受回调的方式定义的某个适当时间被回调。即使那样,我们也不总是使用术语“回调”。例如,事件处理程序是回调,但是我们几乎从未将其称为回调。
...据我所知,这些回调必须全部声明为相同的内容...
一点也不。 onreadystatechange
的{{1}}回调不接收任何参数,但是XMLHttpRequest
回调接收两个,而Array#sort
接收三个(尽管人们通常只使用其中一个或两个) )。他们都是不同的。并非所有回调都必须内联定义,而且通常不是。因此,它们的声明方式并不完全相同。
我知道三种常见的“标准”回调形式:
DOM事件处理程序:被调用时,它们将接收事件对象作为其第一个参数,通常情况下,Array#forEach
将设置为在其上注册了处理程序的元素。它的返回值以标准格式(this
)被忽略,但其他人则将其用于某些事情(请参阅我的帖子:The true story of return false
)。
Promise回调,有两种形式:
promise executor ,这是您传递的addEventListener
函数,它接收两个参数:用于解析项目的函数和用于拒绝项目的函数它。
new Promise
和then
回调,(在标准实现中)接收单个参数,该参数是发生的分辨率值或错误。回调的返回值将解决对catch
或then
的调用所创建的promise,并且从其中任何一个抛出错误都会拒绝该promise。
Node.js样式的API回调:这些回调将错误或catch
作为其第一个参数,如果将null
作为第一个参数传递,则将接收零个或多个非错误值
可能还有其他人。
答案 1 :(得分:0)
回调只是函数,它们的命名非常恰当。当操作完成,资源准备就绪等时,它们被“回调”。回调并不是JavaScript独有的,它们已经存在了数十年。每当调用者想要进行异步调用并在以后接收结果时,此模式都是有意义的。
关于标准化,没有定义回调外观的标准方法,但是您会发现它们相似,例如,Node.js使用错误优先的回调签名,将任何错误传递给错误回调函数的参数。
答案 2 :(得分:0)
要使其变得清晰易读,可以使用名称callback
代替next
。