异步编程:从回调到响应式扩展的探索
1. 同步与异步计算
在函数没有副作用的情况下,时间是另一个重要问题。步骤 1、2 和 3 可能会立即完成,也可能因工作性质而无法完成。关键在于如何确保这些步骤按正确顺序运行。一种方法是将这些函数组合在一起,使一个函数的输出成为下一个函数的输入,形成步骤链。传统做法是嵌套一系列回调函数,应用程序的运行时模型类似如下流程:
graph LR
A[Step 1] -->|Calls step 2| B[Step 2]
B -->|Calls step 3| C[Step 3]
这种嵌套的控制流比同步的直线模型更难理解。在上述流程中,步骤 1 先运行,完成后调用步骤 2,接着步骤 3 执行,以此类推。这表明步骤之间存在时间依赖或时间耦合,即一个步骤在前一个步骤完成后立即开始,形成命令链。回调函数用于响应之前的异步请求并开始处理其数据,常见于顺序 AJAX 请求,也适用于其他基于事件的系统,如按键、鼠标移动、数据库读写等,这些系统都依赖回调函数。
2. 回调函数是否过时
答案是否定的。在处理与用户或外部服务的简单交互时,使用范式来处理基于事件或异步代码并非必要。如果编写一个简单的脚本发出单个远程 HTTP 请求,RxJS 有些大材小用,回调函数仍然是完美的解决方案。然而,当实现中等至高级复杂度的状态机,如动态 UI 或服务编排时,结合函数式和响应式范式的库就会发挥出优势。例如,编排多个使用多个微服务的业务流程的执行、数据混搭,或者实现页面上多个相互交互的小部件组成的丰富 UI 的功能。
<
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



