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

曲阿子期 2021-10-29 17:09:16

做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收到数据后才能返回,否则达到设定时间后超时返回

...全文
137 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-网络与通信 发布问题, 以便更快地解决您的疑问

87,987

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧