2014-10-27 18 views
8

Tôi tạo ra một trung tâm SignalR có chứa các chức năng trung tâm sau:SignalR hàm trả về giá trị

public bool GetStatus() 
{ 
    return true; 
} 

Tôi muốn gọi chức năng này từ mã JS của tôi và nhận được yêu cầu của cuộc gọi này. Một cái gì đó như thế này:

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

Điều này có thể không trả lại Nhiệm vụ của bool không?

Cảm ơn bạn.

+0

ý của bạn là gì khi trả lại Tác vụ? –

+0

bạn có muốn trả lại bất kỳ thứ gì không? –

+0

Có một tùy chọn để trả lại Tác vụ, điều này làm cho toàn bộ quá trình không đồng bộ. Điều này tôi muốn tránh. – No1Lives4Ever

Trả lời

23

No. Máy khách JavaScript SignalR không bị chặn; bạn sẽ cần phải làm theo giao diện Hứa hẹn, như vậy:

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

Về phía khách hàng, bạn cần sử dụng giao diện lời hứa. nhưng ở phía máy chủ đó là hoàn toàn tùy thuộc vào bạn, mã dưới đây là từ hướng dẫn SignalR site:

Synchronous

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

Asynchronous

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>>()); 
    } 
} 

Chỉ cần thay đổi chữ ký máy chủ theo yêu cầu của bạn

Các vấn đề liên quan