我正在尝试从教程中学习 Redux/Angular,并想知道我刚刚开始理解的这种模式是否有一个名称。
这是完整的文件描述,但我试图识别的模式是通过这些行之间的连接:
使用订阅方法并传入回调函数():
let unsub = SUPER_STORE.subscribe(()=> {
console.log('subs : ', SUPER_STORE.getState())
});
订阅方法推送监听器并返回回调以删除监听器:
subscribe(listener: ListenerCallback): UnsubscribeCallback {
this._listeners.push(listener);
return () => { // returns an "unsubscribe" function
this._listeners = this._listeners.filter(l => l !== listener);
};
}
dispatch 方法通过循环遍历集合中的每个 _listener 来处理这些回调。
this._listeners.forEach((listener: ListenerCallback) => listener());
我从未见过这种传入回调并返回新回调以供稍后调用的模式。
问题:
此模式有名称吗?如果是,那是什么?
完整的 JS:
interface Action {
type: string;
payload?: any;
}
interface Reducer<T> {
(state:T, action:Action): T
}
interface ListenerCallback {
(): void;
}
interface UnsubscribeCallback {
(): void;
}
class Store<T> {
private _state:T;
private _listeners: ListenerCallback[] = [];
constructor(private reducer:Reducer<T>, initState) {
this._state = initState;
}
getState():T {
return this._state;
}
dispatch(action: Action): void {
this._state = this.reducer(this._state, action);
this._listeners.forEach((listener: ListenerCallback) => listener());
}
subscribe(listener: ListenerCallback): UnsubscribeCallback {
this._listeners.push(listener);
return () => { // returns an "unsubscribe" function
console.log('unsubscribe');
this._listeners = this._listeners.filter(l => l !== listener);
};
}
}
const SUPER_REDUCE:Reducer<number> = (state:number, action:Action) => {
switch (action.type) {
case 'INCREMENT':
return state + 1;
default:
return state;
}
};
const INCREMENT_ACTION:Action = {type: 'INCREMENT'};
const SUPER_STORE = new Store<number>(SUPER_REDUCE, 0);
let unsub = SUPER_STORE.subscribe(()=> {
console.log('subs : ', SUPER_STORE.getState())
});
SUPER_STORE.dispatch(INCREMENT_ACTION); // 0
SUPER_STORE.dispatch(INCREMENT_ACTION); // 1
SUPER_STORE.dispatch(INCREMENT_ACTION); // 2
SUPER_STORE.dispatch(INCREMENT_ACTION); // 4
unsub(); // 'unsubscribe'
最佳答案
Pubsub(发布者-订阅者模式) https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern
关于javascript - 您存储返回回调的回调的模式是否有名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38711107/