本篇带来 Thunk 理解,这也是本瓜最津津乐道的 JS 函数式编程中延迟处理的思想核心之一! 什么是 Thunk ? 简单理解:在计算机编程中,Thunk 就是一种实现延迟执行的手段。 举个栗子????
本篇带来 Thunk 理解,这也是本瓜最津津乐道的 JS 函数式编程中延迟处理的思想核心之一! 什么是 Thunk ? 简单理解:在计算机编程中,Thunk 就是一种实现延迟执行的手段。 举个栗子????????????我要计算 99 的 9 次方,然后再把它打印出来,你会怎么写? 大聪明肯定是直接一句话:
有点想法的同学肯定想封装一个函数,因为后续还可能要 88 的 8 次方、77 的 7 次方等等:
如果还有更多想法,可能会考虑: 今天你让我 console 打印结果,明天如果让我 alert 弹窗提醒结果怎么办?后天又让我 handleXXX 处理结果,又该怎么办? 所以,这里可以设计一个(可自定义的)回调函数来处理这个运算结果: 代码演进
在这个例子中,调用powerThunk() 并不会马上执行 power() 运算,这就是所谓的延迟执行。 并且 powerThunk() 只用再传一个回调函数进去就行了,不用再传 base 99 和 exponent 9 这两个参数了。 在某种意义上来讲,thunk 也是一个已经固定某些参数的一个函数,上例中 power 要传 3 个参数,而 powerThunk 只用传一个参数就行了。这感觉就有点像柯里化。 可能有同学问了: “我就喜欢直接修改,不喜欢封装,行吗?” “行呀,咋不行,即使自己不做封装,你也在无时无刻地用这种封装。Promise 就是基于 Thunk。” 继续上面的例子讲: 改造成异步上面的例子是同步的,我们改造成异步的:
当我们调用 fetchCurrencies() 时,会执行 fetchCurrenciesData((res) => console.log(res))() 就会按序执行 fetch 方法,然后走 .then 处理成 json,然后打印。 toThunk 工具函数一套嵌一套,母猪带熊罩。所以,我们可以写出一个 toThunk 工具函数:
可以将任何函数处理做成上述的逻辑:
thunk 的两步执行,第一步传入参数,第二步是传入回调函数,这就是 Promise 的 then 的方法思路!! thunk 还可以搭配 es6 生成器使用,本篇就不作展开。 JavaScript 中「Thunk」怎么理解,你 get 到了吗? |
2021-06-04
2019-01-10
2019-02-17
2021-09-12
2021-09-30