1. 程式人生 > 其它 >js實現一個訂閱模式

js實現一個訂閱模式



// 訂閱傳參
// interface IPublish {
 /** 執行回撥函式 */
 // fun: (locationInfoCache) => void;
 /** 訂閱次數 number次 或者無限次 */
 // period: number | 'always';
// }


const PubSub = (function () { const publishList = []; return {
     // TS增加interface限制傳入資訊 publish: function (msg) { publishList.push(msg); }, subscribe: function () { for (let i = 0; i < publishList.length; i++) { let { fun, perload } = publishList[i]; fun(); if (perload !== 'always' && --perload <= 0) { publishList.splice(i, 1); i--; } } } } })(); PubSub.publish({ fun: () => { console.log('1: 一次訂閱 只執行一次'); }, perload: 1 }); PubSub.publish({ fun: () => { console.log('無限訂閱 執行多次'); }, perload: 'always' }); PubSub.publish({ fun: () => { console.log('2: 一次訂閱 只執行一次'); }, perload: 1 }); PubSub.subscribe(); console.log('第二次釋出===============>'); PubSub.subscribe(); console.log('第三次釋出===============>'); PubSub.subscribe();