javascript - SignalR: Wait for connection to be re-established before invoking methods -


i have hubproxy many client triggered methods described below:

proxy.invoke('hub_subscribe'); proxy.invoke('triggeronserver'); proxy.invoke('datatoserver',somemodel); 

now if signalr not connected server , try invoke of above methods, give me connection must started before data can sent. or connection disconnected before invocation result received. error.

i aware 1 can utilize connection.statechanged confirm whether signalr connected or not , invoke methods accordingly. there need log these events can invoked once signalr connection up.

so, there simple way log these methods in case connection disconnected? , later once signalr connection , running, invoke methods?

something proxy.invoke('datatoserver',somemodel).waitforsignalrtobeconnected();

note: continuously connect server after client gets disconnected using this

what need promises using $q service.

i'm assuming have initialize hub connection first, invoke 3 other methods in order.

create service if dont have 1 managing communication signalr server. inject $q service , signalr in it.

wrap each of following commands in seperate methods:

function doinitialize() {     ... // connect signalr     return $q.when(connection.hub.start()); };  function dohubsubscribe() {     return $q.when(proxy.invoke('hub_subscribe')); };  function dotriggeronserver() {     return $q.when(proxy.invoke('triggeronserver')); };  function dodatatoserver() {     return $q.when(proxy.invoke('datatoserver',somemodel)); }; 

now controller can make nested calls service's methods in way first 1 needs pass in order next ones run:

function initsignalr() {     return service.doinitialize().then(function () {         return service.dohubsubscribe();     }).then(function () {         return service.dotriggeronserver();     }).then(function () {         return service.dodatatoserver();     }) }; 

edit:

if want add more handling invokations, can use jquery .done() , .fail() methods this:

function senddatatoserver() {     $q.when(proxy.invoke('datatoserver', somemodel))                     .done(function (result) {                           deferred.resolve(result);                           console.log('success!');                       })                       .fail(function () {                           deferred.reject();                           console.error('error invoking server!');                       }));     return deferred.promise; }; 

you can add more handling code .fail() method, example add $timeout service set retries.

hope helps.


Comments

Popular posts from this blog

php - Wordpress website dashboard page or post editor content is not showing but front end data is showing properly -

javascript - Get parameter of GET request -

javascript - Twitter Bootstrap - how to add some more margin between tooltip popup and element -