等待多个WebSocket回调

时间:2017-07-11 08:51:15

标签: javascript jquery websocket callback promise

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

即:

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

现在我想显示一个加载器(微调器),只有在加载了所有数据(所有回调都完成)后才能使它消失。我知道我可以让回调更新一个计数器,但如果可能的话,我正在寻找一种更优雅的方法。

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

请帮忙。

1 个答案:

答案 0 :(得分:3)

宣传它:

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);
});

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

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