gpt4 book ai didi

javascript - 此评论中的惰性评估是什么意思?

转载 作者:可可西里 更新时间:2023-11-01 01:38:43 25 4
gpt4 key购买 nike

在我用于 React Redux 项目的样板中,我在代码中遇到了这个注释:

This is a thunk, meaning it is a function that immediately returns a function for lazy evaluation. It is incredibly useful for creating async actions, especially when combined with redux-thunk!

现在,如果我理解正确的话,惰性求值就是返回一个函数的过程。返回函数的目的是什么?这对创建异步操作有何好处?

哦还有,thunk 只是一个函数吗?

最佳答案

thunk 是一个不接受参数并返回某些东西(或做一些副作用)的函数。惰性求值是将表达式的求值推迟到以后的过程,这可以通过 thunk 来完成:

// Not lazy
var value = 1 + 1 // immediately evaluates to 2

// Lazy
var lazyValue = () => 1 + 1 // Evaluates to 2 when lazyValue is *invoked*

您还可以使返回值变得惰性:

// Not lazy
var add = (x, y) => x + y
var result = add(1, 2) // Immediately evaluates to 3

// Lazy
var addLazy = (x, y) => () => x + y;
var result = addLazy(1, 2) // Returns a thunk which *when evaluated* results in 3.

最后我们可以推迟一些异步操作:

// Not lazy
var callApi = spec => fetch(spec.url, spec.options);
// Immediately returns a Promise which will be fulfilled when the network response is processed.
var result = callApi({url: '/api', options: {}});

// Lazy
var callApiLazy = spec => () => fetch(spec.url, spec.options);
var result = callApiLazy({url: '/api', options: {}});
// result is a thunk that when evaluated will return a Promise ...
// which will be fulfilled when the network response is processed.

现在 thunk 不必接受零参数 - 您可以返回一个需要更多参数才能成功计算的惰性值。这被恰本地称为“currying”:

// Curried add (not lazy)
var add = x => y => x + y
var add3 = add(3)
var result = add3(7) // Immediately evaluates to 10

redux-thunk 允许您将函数而不是对象作为操作返回,并使用 dispatch 函数调用您的函数。然后,您可以延迟地同步或异步地生成一个(或多个) Action 。大多数时候,您会希望使用它来允许您异步调度。

另见:

关于javascript - 此评论中的惰性评估是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38904865/

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