gpt4 book ai didi

javascript - 如何从回调链中删除突变?

转载 作者:行者123 更新时间:2023-11-30 21:05:41 30 4
gpt4 key购买 nike

我正在尝试使用函数式编程来存储状态。

我写了一个既有突变又有副作用的函数;虽然,确实包括一些封装。我如何使用函数式编程来表示相同的功能?

const createCallbackChain = () => {
let callbacks = []

const addCallback = callback => (
callbacks
.push(callback)
)

const triggerCallbacks = data => (
callbacks
.forEach(callback => callback(data))
)

return (
Object.freeze({
addCallback,
triggerCallbacks,
})
)
}

const callbackChain = createCallbackChain()

callbackChain.addCallback(() => console.log('Hello'))
callbackChain.addCallback(() => console.log('World!'))

callbackChain.triggerCallbacks()

我的目标是能够在不同的时间调用 addCallback 并根据需要多次触发所有回调。不需要 removeCallback,也不需要在 trigger 发生后添加回调。

最佳答案

您需要创建函数来处理某些数据。您的案例中的回调数组。我们可以在没有闭包的情况下编写我们的函数,并将我们的回调作为参数传递。

const triggerCallbacks = (callbacks, data) => callbacks
.forEach(callback => callback(data));

const addCallback = (callbacks, callback) => callbacks.concat([callback]);

const calbackChainDefault = [];

const withHelloCallback = addCallback(calbackChainDefault, () => console.log('Hello'));
const withWorldCallback = addCallback(withHelloCallback, () => console.log('World!'));

triggerCallbacks(withHelloCallback, null); //print "Hello"
triggerCallbacks(withWorldCallback, null); //print "Hello World"

关于javascript - 如何从回调链中删除突变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46641171/

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