我正在使用多个 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/