背景
我正在学习ClojureScript,因此Ajax对我来说是如下工作的:
(make-ajax-call url data handler);
其中handler看起来像是:
(fn [response] .... )
现在,这意味着当我想说“获取新数据并更新左侧边栏”时,我的最终结果看起来像这样:
(make-ajax-call "/fetch-new-data" {} update-sidebar!) [1]
现在,我更希望将其表述为:
(update-sidebar! (make-ajax-call "/fetch-new-data" {})) [2]
但它不起作用,因为 make-ajax 调用会立即返回。
问题
通过单子或宏的某种方式使其工作的方法是什么?这样 [2] 就能自动重写成 [1]。我相信:
- 由于它被重写成 [1],所以不会有性能惩罚。 - 对于我来说更容易理解,因为我可以思考同步步骤而不是异步事件。
我怀疑我不是第一个遇到这个问题的人,如果这是一个众所周知的问题,那么“Google 搜索 Problem Foo”这样的答案是完全有效的。
谢谢!