WebSockets Promises
Don't run in HTTPS
by Luis Valle
HTML
<div>
<button id="btnCall">
Call Websocket
</button>
</div>
<div id="dvResponses">
</div>
JavaScript
(function () {
$("#btnCall").on("click", function () {
WScall("helloMethod", { keys: "myKeys" })
.then(function (response) {
console.log(response.data.keys);
});
return false;
});
})();
var callbacks = {};
var websocket = new WebSocket("ws://echo.websocket.org/");
var messages = {
requests: [],
unhandled: []
};
websocket.onmessage = function(event) {
var data = $.parseJSON(event.data);
if (data.request_id in callbacks) {
var callback = callbacks[data.request_id];
delete callbacks[data.request_id];
callback.resolve(data);
} else {
console.log('not found');
}
};
var requestId = 0;
function getRequestId() {
return requestId++;
};
function WScall(method, spParams) {
var d = $.Deferred();
var request = {
request_id: getRequestId(),
data: spParams
};
callbacks[request.request_id] = d;
messages.requests.push(request);
websocket.send(JSON.stringify(request));
return d.promise();
}