2014-10-27 68 views
8

我创建了包含以下枢纽功能的SignalR枢纽:SignalR函数的返回值

public bool GetStatus() 
{ 
    return true; 
} 

我想从我的JS代码调用这个函数,并得到该调用的请求。这样的事情:

var result = hub.server.getStatus(); 
if (result) 
    alert('success'); 

这可能没有返回布尔任务?

谢谢。

+0

你是什么意思返回任务? – 2014-10-27 18:35:46

+0

你想让它返回任何东西吗? – 2014-10-27 18:37:33

+0

有一个选项可以返回任务,这使整个过程异步。这是我想要避免的。 – No1Lives4Ever 2014-10-27 18:37:33

回答

23

否SignalR JavaScript客户端是非阻塞的;您需要遵循Promise接口,如下所示:

hub.server.getStatus().done(function(result) { 
    if (result) { 
     alert('success'); 
    } 
}); 
2

在客户端,您需要使用promise接口。但在服务器端,这完全取决于你,下面的代码是从SignalR引导site

同步

public IEnumerable<Stock> GetAllStocks() 
{ 
     // Returns data from memory. 
     return _stockTicker.GetAllStocks(); 
} 

异步根据您的需要

public async Task<IEnumerable<Stock>> GetAllStocks() 
{ 
    // Returns data from a web service. 
    var uri = Util.getServiceUri("Stocks"); 
    using (HttpClient httpClient = new HttpClient()) 
    { 
     var response = await httpClient.GetAsync(uri); 
     return (await response.Content.ReadAsAsync<IEnumerable<Stock>>()); 
    } 
} 

只要改变服务器签名