曲阿子期 2021-10-29 17:09 采纳率: 0%
浏览 14

Promise内的自定义事件为什么不响应?

做websocket应用时有这样一种需求:

ws.onmessage = function(e) {
}

这个要响应做普通异步数据处理,但偶尔有同步处理的需求,于是我在ws.onmessage里自定义了一个事件:

ws.onmessage = function(e) {
//...
myData = procData(e.data);//处理我想要的数据

//以下发送自定义消息
var evt = new CustomEvent('Message', {
   detail: {data: myData},
 });
 window.dispatchEvent(evt);

}

 

 

var onMessage;

window.addEventListener("Message",onMessage,false);

//直接下面这样是有响应的
onMessage = function(e) {
   console.log(e.detail.data);
}

 

//但如果放到Promise内就没响应了,更奇怪的是ws.onmessage这个消息就会有响应
function ReceiveMessage() {
   return new Promise((resolve) => {
      onMessage = function(e) {
         console.log(e.detail.data);
         resolve(e.detail.data);
      }
      //ws.onmessage = function(e) {
      // 如果用这一段代码就有响应
      //}
   });
}

async function func1() {
   //...
   var ret = await ReceiveMessage();
   return (ret);
}

我是业余玩玩JS的,并不怎么会,很多代码都是网上找来的,谁能告诉我这是为什么?
我的目的就是要func1等到WS收到数据后才能返回,否则达到设定时间后超时返回

  • 写回答

1条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 创建了问题 10月29日

      悬赏问题

      • ¥15 这个程序哪里有问题呢,显示0分
      • ¥15 我想问一下像图片中这种效果怎么实现
      • ¥20 关于#vue.js#的问题:el-tag拖放到 el-input框时无法完成填充(语言-javascript)
      • ¥15 python小游戏飞机大战空格发射子弹报错,添加旋转代码后陨石一直变大,不知道哪里出错了
      • ¥50 QT websocket·
      • ¥15 配置LED用PWM波点亮,但是LED与LCD的引脚复用问题导致PWM无法使能
      • ¥15 Python如何进行分数的求和
      • ¥15 prophet 在进行fit时报错
      • ¥60 共享充电宝程序想要一个
      • ¥15 求:支付宝旧版接口文档