我正在使用多个 WebSocket查询初始化页面(我通过onmessage事件接收结果,然后为我收到的每条消息调用正确的回调函数。)
即:
query("get_users",callback1);
query("get_weather",callback2);
...
现在我想显示一个加载器(微调器),只有在加载了所有数据(所有回调都完成)后才能使它消失。我知道我可以让回调更新一个计数器,但如果可能的话,我正在寻找一种更优雅的方法。
我尝试使用JQuery Promises但无法理解如何将其与WebSockets(而不是Ajax调用)一起使用。
请帮忙。
答案 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