javascript - 等待多个 WebSocket 回调

标签 javascript jquery websocket callback promise

我正在使用多个 WebSocket 查询 初始化一个页面(我通过 onmessage 事件接收结果,然后为我收到的每条消息调用正确的回调函数)。

即:

query("get_users",callback1);
query("get_weather",callback2);
...

现在我想显示一个加载器(微调器)并使其仅在所有数据加载完毕后消失(所有回调都已完成)。我知道我可以让回调更新一个计数器,但如果可能的话,我正在寻找一种更优雅的方式来做到这一点。

我尝试使用 JQuery Promises,但无法理解如何将它与 WebSockets(而不是 Ajax 调用)一起使用。

请帮忙。

最佳答案

promise 它:

function request(url){
 return new Promise(function(resolve){
   query(url,resolve);
 });
}

然后你可以使用 Promise.all:

Promise.all([request("get_users"),request("get_weather")])
 .then(function([users,weather]){
   console.log(users,weather);
});

如果您想分离数据处理程序和微调器,只需使 Promises 全局可用:

var users=request("get_users"),
  weather=request("get_weather");

weather.then(function(weather){
  //show weather
});
//same with users

loader.show();//show some spinner
Promise.all([weather,users]).then(loader.hide);//hide if all loaded

关于javascript - 等待多个 WebSocket 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45029741/

相关文章:

javascript - 取消绑定(bind) Kendo UI 网格事件

jquery - 复制 Ctrl+F 行为

javascript - 填充文本框时启用一组单选按钮

javascript - WebSockets : Make javascript wait until server responds

javascript - Next.js Jest 28 - 无法转换 SVG 文件

javascript - 刷新/ctrl-r 时更改 Chrome 扩展程序的 URL

javascript - 在兄弟组件之间传递数据

node.js - Nodejs websocket 服务器,http 触发器

javascript - 'opcode -1' 在 Chrome 中是什么意思?

仅允许正数的 Javascript 正则表达式