[Javascript] Create an Actor model in Javascript
Refer to: https://stately.ai/docs/actor-model
What defines an “actor”?
Actors are independent “live” objects that can communicate with each other via asynchronous message passing. In XState, we refer to these messages as events.
- An actor has its own internal, encapsulated state that can only be updated by the actor itself. An actor may choose to update its internal state in response to a message it receives, but it cannot be updated by any other entity.
- Actors communicate with other actors by sending and receiving events asynchronously.
- Actors process one message at a time. They have an internal “mailbox” that acts like an event queue, processing events sequentially.
- Internal actor state is not shared between actors. The only way for an actor to share any part of its internal state is by:
- Sending events to other actors
- Or emitting snapshots, which can be considered implicit events sent to subscribers.
- Actors can create (spawn/invoke) new actors.
function counterBehavior(state, event) {
if (event.type === "INCREMENT") {
return {
...state,
count: state.count + 1,
};
}
return state;
}
function createActor(behavior, initialState) {
let currentState = initialState;
const listeners = new Set();
function notifyListeners() {
for (const listener of listeners) {
listener(currentState);
}
}
return {
send: (event) => {
currentState = behavior(currentState, event);
notifyListeners();
},
subscribe: (listener) => {
listeners.add(listener);
listener(currentState);
},
getSnapshot: () => {
return currentState;
},
};
}
const actor = createActor(counterBehavior, { count: 0 });
actor.subscribe((state) => {
console.log("State is now", state);
});
actor.send({ type: "INCREMENT" });
分类:
Javascript
, [Whole Web]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2019-08-14 [Firebase] Firebase rules
2019-08-14 [Algorithm] Binary Search Tree
2018-08-14 [AngularJS 1.6] ngModelOptions and inheritance
2018-08-14 [Java Sprint] Spring XML Configuration : Setter Injection Demo
2017-08-14 [D3] Build a Line Chart with D3 v4
2017-08-14 [Angular] Style HTML elements in Angular using ngStyle
2017-08-14 [Firebase] Firebase Cloud Functions