gpt4 book ai didi

typescript - Effect 应该返回 Event 吗?

转载 作者:行者123 更新时间:2023-12-04 03:39:31 24 4
gpt4 key购买 nike

我在这里有一个简单的例子来重现我的问题。我正在尝试创建一种通用的客户端处理程序。当客户端通过 TCP 服务器连接时,我调用 clientFx 效果来创建客户端实例。

假设我将有不同的 TCP 服务器,它们都有共同的 clientFx,但处理传入数据的方式不同。这就是为什么我有 handleData 函数,它返回 2 个事件,输入事件 onData 和输出事件 onPayload,它返回解析的有效负载。

我在 client.done.watch 函数中结束,因为我觉得在 watch 中定义处理数据流不是正确的方法。

这是好方法还是我完全错了?

import * as net from 'net';
import { createDomain, createEffect, forward } from "effector";

function handleData() {
const domain = createDomain();

const onData = domain.createEvent();
const onPayload = domain.createEvent();

const $store = domain.createStore<number>(0);
$store.on(onData, x => x + 1);

forward({ from: $store, to: onPayload });

return {
onData,
onPayload
};
}

const clientFx = createEffect((socket: net.Socket) => {
const { onData, onPayload } = handleData();

socket.on('data', onData);

return {
clientId: Math.floor(Math.random() * 100),
onPayload
}
});

clientFx.done.watch(({ result: client }) => {
client.onPayload.watch((state) => {
console.log('Store', client.clientId, 'changed to', state);
});

forward({ from: client.onPayload, to: saveToDbFx });
});

net.createServer(clientFx).listen(5555);

最佳答案

我没听懂你问题的上下文,但我会试一试。您可以提出其他问题

const $clientsMap = createStore({})
const saveToDbFx = createEffect()
$clientsMap.on(saveToDbFx.done, (clients, ({ params })) => {
return {
...clients,
[params.id]: params
}
})
function createClient(socket: net.Socket) {
const onMessage = createEvent()
socket.on('data', onMessage)
split({
source: onMessage,
match: {
firstSocketType: firstSocketTypeFilterFn,
secondSocketType: secondSocketTypeFilterFn
},
cases: {
firstSocketType: saveToDbFx.prepend(firstDataHandlerFn),
secondSocketType: saveToDbFx.prepend(secondDataHandlerFn),
})
}
saveToDbFx.watch(console.log)

关于typescript - Effect 应该返回 Event 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66313122/

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