gpt4 book ai didi

callback - 钩子(Hook)和回调有什么区别?

转载 作者:行者123 更新时间:2023-12-03 09:20:12 30 4
gpt4 key购买 nike

通过阅读一些文字,尤其是关于委托(delegate)的iOS文档,所有协议(protocol)方法都被称为 Hook 自定义委托(delegate)对象需要实现。但是其他一些书,命名为 Hook 作为 回调 ,它们之间有什么区别?它们只是名称不同但机制相同吗?除了 Obj-C,其他一些编程语言,比如 C,也得到了 Hook ,与 Obj-C 的情况相同吗?

最佳答案

让我加入一个 Javascript 答案。在 Javascript 中,回调 , Hook 事件 都用过。按照这个顺序,它们都是比另一个更高层次的概念。

不幸的是,它们经常被不当使用,从而导致困惑。

回调

从控制流的角度来看,回调是一个函数,通常作为参数给出,在从函数返回之前执行。

这通常用于需要等待 I/O 的异步情况(例如 HTTP 请求、文件读取、数据库查询等)。您不想等待同步 while循环,因此可以同时执行其他功能。

当您获取数据时,您(永久)放弃控制并使用结果调用回调。

function myFunc(someArg, callback) {
// ...
callback(error, result);
}

因为回调函数可能是一些尚未执行的代码,并且您不知道调用堆栈中函数上方的内容,所以通常不是抛出错误,而是将错误作为参数传递给回调。有错误优先和结果优先的回调约定。

大多数回调已被 Promises 取代在 Javascript 世界中,自 ES2017+ 起,您可以原生使用 async/await 摆脱回调丰富的意大利面条式代码并使异步控制流看起来像同步的。

有时,在特殊的级联控制流中,您在函数中间运行回调。例如。在 Koa (web server) middlewareRedux middleware你跑 next()在堆栈中的所有其他中间件都已运行后返回。

Hook

钩子(Hook)并不是一个定义明确的术语,但在 Javascript 实践中,当您希望客户端(API/库用户、子类等)在控制流中明确定义的点采取可选操作时,您可以提供钩子(Hook)。

因此,钩子(Hook)可能是您在某个点调用的某个函数(例如,一个参数或一个类方法),例如在数据库更新期间:

data = beforeUpdate(data);

// ...update

afterUpdate(result);

通常的重点是:
  • Hook 可以是可选的
  • 钩子(Hook)通常是等待的,即它们在那里修改一些数据
  • 每个钩子(Hook)最多调用一个函数(与事件相反)

  • React 在其 Hooks API 中使用了钩子(Hook)。 ,并且它们 - 引用他们的定义 - “是让你“ Hook ” React 状态和生命周期特性的函数”,即它们让你改变 React 状态,并且每次当状态的某些部分发生变化时,它们还可以运行自定义函数。

    事件

    在 Javascript 中,事件在特定时间点发出,客户端可以订阅它们。事件发生时调用的函数称为 听众 - 或者为了增加混淆, 回调 .我更喜欢避免使用“回调”这个词,而是使用“监听器”这个词。

    这也是一种通用的 OOP 模式。

    在前端有一个 DOM interface对于事件,在 node.js 中你有 EventEmitter界面。 ReactiveX 中实现了一个复杂的异步版本.

    事件的属性:
  • 可能有多个监听器/回调订阅(将执行)同一事件。
  • 它们通常不接收回调,只接收一些事件信息并同步运行
  • 一般来说,不像钩子(Hook) ,它们不用于修改事件发射器控制流中的数据。发射器不在乎“是否有人在听”。它只是使用事件数据调用监听器,然后立即继续。

  • 示例:事件发生在数据流开始或结束、用户单击按钮或修改输入字段时。

    关于callback - 钩子(Hook)和回调有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11087543/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com