2014-10-27 70 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>>()); 
    } 
} 

只要改變服務器簽名