瀏覽代碼

[edit][消息中心]

zhangwei 2 年之前
父節點
當前提交
6149836bc6
共有 3 個文件被更改,包括 42 次插入47 次删除
  1. 9 8
      src/uilts/denet/content/doTask.js
  2. 3 1
      src/uilts/help.js
  3. 30 38
      src/uilts/messageCenter/iframe/index.js

+ 9 - 8
src/uilts/denet/content/doTask.js

@@ -1,14 +1,15 @@
 import MESSAGE_ENUM from '@/uilts/messageCenter/iframe/messageEnum'
 import messageCenter from '@/uilts/messageCenter/iframe'
+import { iframeId } from '@/uilts/help'
 
 // 做任务
 const doTask = {
-    createTweet({ iframeId, tweetId }, overTime) {
+    createTweet({ tweetId }, overTime) {
         return new Promise((res, rej) => {
             messageCenter.send({
                 info: {
                     actionType: MESSAGE_ENUM.IFRAME_DO_TASK_CREATE_TWEET,
-                    iframeId: iframeId //用于告诉父窗口会传消息给哪个iframe
+                    iframeId //用于告诉父窗口会传消息给哪个iframe
                 },
                 data: {
                     tweetId
@@ -23,12 +24,12 @@ const doTask = {
             })
         })
     },
-    like({ iframeId, tweetId }, overTime) {
+    like({ tweetId }, overTime) {
         return new Promise((res, rej) => {
             messageCenter.send({
                 info: {
                     actionType: MESSAGE_ENUM.IFRAME_DO_TASK_LIKE,
-                    iframeId: iframeId //用于告诉父窗口会传消息给哪个iframe
+                    iframeId //用于告诉父窗口会传消息给哪个iframe
                 },
                 data: {
                     tweetId,
@@ -43,12 +44,12 @@ const doTask = {
             })
         })
     },
-    follows({ iframeId, follows }, overTime) {
+    follows({ follows }, overTime) {
         return new Promise((res, rej) => {
             messageCenter.send({
                 info: {
                     actionType: MESSAGE_ENUM.IFRAME_DO_TASK_FOLLOWS,
-                    iframeId: iframeId //用于告诉父窗口会传消息给哪个iframe
+                    iframeId //用于告诉父窗口会传消息给哪个iframe
                 },
                 data: {
                     follows
@@ -63,12 +64,12 @@ const doTask = {
             })
         })
     },
-    reTweet({ iframeId, tweetId }, overTime) {
+    reTweet({ tweetId }, overTime) {
         return new Promise((res, rej) => {
             messageCenter.send({
                 info: {
                     actionType: MESSAGE_ENUM.IFRAME_DO_TASK_RETWEET,
-                    iframeId: iframeId //用于告诉父窗口会传消息给哪个iframe
+                    iframeId //用于告诉父窗口会传消息给哪个iframe
                 },
                 data: {
                     tweetId

+ 3 - 1
src/uilts/help.js

@@ -320,4 +320,6 @@ export const getBeforeTimeFormat = (timestamp) => {
   }
   let _s = moment.duration(_d1.diff(_d2)).seconds()
   return plural(_s, 'sec')
-}
+}
+
+export const iframeId = getQueryString('iframeId')

+ 30 - 38
src/uilts/messageCenter/iframe/index.js

@@ -25,42 +25,33 @@ class MessageCenter {
     }
 
     listen(messageId, callback) {
-        let activeQuene = this.messageCallbackMap.get(messageId);
-        if (activeQuene?.length > 0) {
-            activeQuene.push(callback)
-        } else {
-            this.messageCallbackMap.set(messageId, [callback])
-        }
+        // 序列添加失败回调
+        this.messageCallbackMap.set(messageId, { callback })
     }
 
     addFailback(messageId, overTime = 2000, failback) {
-        let failbackQuene = this.messageFailbackMap.get(messageId);
-        if (failbackQuene && failbackQuene.failCallbackList) {
-            failbackQuene.failCallbackList.push(
-                failback
-            )
-        } else {
-            this.messageFailbackMap.set(messageId, {
-                time: new Date().getTime(),
-                overTime,
-                failCallbackList: [failback]
-            })
-        }
+        // 序列添加失败回调
+        this.messageFailbackMap.set(messageId, {
+            time: new Date().getTime(),
+            overTime,
+            failback
+        })
         this.checkTimer()
     }
 
-
-
     init() {
         window.addEventListener('message', (e) => {
             const { info, data } = e.data;
+            // 序列删除 失败回调
             this.messageFailbackMap.delete(info.messageId);
-            const quene = this.messageCallbackMap.get(info.messageId) || [];
-            let index = 0;
-            while (index < quene.length) {
-                const callback = quene[index];
+
+            // 执行成功回调
+            const _item = this.messageCallbackMap.get(info.messageId);
+            if (_item) {
+                const callback = _item.callback
                 callback(data)
-                index++
+                // 序列删除 成功回调
+                this.messageCallbackMap.delete(info.messageId)
             }
         })
 
@@ -70,25 +61,26 @@ class MessageCenter {
         if (this.timer) {
             return
         }
+        let key, value, now_time
         this.timer = setInterval(() => {
-            if (this.messageFailbackMap.values().length == 0) {
+            if (this.messageFailbackMap.size == 0) {
                 clearInterval(this.timer)
                 this.timer = null
             }
 
             // 轮询查看有无超期的message信息
-            const now = new Date().getTime();
-            for (let item of this.messageFailbackMap.values()) {
-                if (now - item.time > item.overTime) {
-                    let index = 0;
-                    while (index < item.failCallbackList.length) {
-                        const callback = item.failCallbackList[index];
-                        callback({
-                            error: 0,
-                            msg: "message 超时错误"
-                        })
-                        index++
-                    }
+            now_time = new Date().getTime();
+            for (let item of this.messageFailbackMap.entries()) {
+                key = item[0] || ''
+                value = item[1] || {}
+
+                if (now_time - value.time > value.overTime) {
+                    const callback = value.failback
+                    callback && callback({
+                        error: 0,
+                        msg: "message 超时错误"
+                    })
+                    this.messageFailbackMap.delete(key)
                 }
             }
         }, 1000)