2015-01-24 5 views
-1

Мой концентратор: (упрощенный)Javascript Signalr клиент не ожидает ответа сервера

public string BPF(string m1, string m2) 
    { 
     r = BiPoint4Clases.BiPoint4.getString(BP4Engine.Startup.cnxString, m2);// this gets a String from SQL Server accordig query passed on m2 hub parameter. 
     return r; 
} 
catch(Exeption e) 
    { 
     // manage exeptions. .... 
    } 

Мои Javascript клиент:

function GetString(z){ 
    bip.server.BPF("gS",z).done(function(result){array.push(result)}); 
} 

//calling function to get string 

GetString("select top 1 u from users"); 
alert(array); 

//This returns nothing.... 
//function GetString, returns after .done() pushes result on array 

Как я могу ждать ответа сервера для JavaScript функции вызова ступиц возвращается ,

Пробовано с $.Deferred , $.when().then, но нет результатов.

ответ

0

Удаление функции GetString() Ваш браузер, работающий, как это:

bip.server.BPF("gS",z).done(function(result){array.push(result)}); 
alert(array); 

.done() функция выполняется асинхронно. Это означает, что скрипт перейдет к следующему оператору, который является alert().

В основном вы хотите вернуть отложенный объект, и использовать его для обработки обратного вызова:

function GetString(z){ 
    return bip.server.BPF("gS",z); 
} 

GetString("select top 1 u from users").done(function(r) { 
    array.push(r); 
    alert(array); 
}); 
+0

не работает, потому что signalr хаб (bip.server ....) –

+0

я опробованный, но Безразлично Не работай. Концентратор SIGNALR возвращает результат по отложенному результату (результат) bip.server.BPF («gS», «select bla blabla ....»). Done (function (r) {! Here are result ...})) ; Если я вызываю bip.server.BPF («gS», «select bla blabla ....») без .done() никогда не сможет найти результат. (Извините за мой бедный английский) –

+0

продолжают: в GetString ("выбрать топ 1 U от пользователей") сделано (функция (г) { Array.push (г);});. // !!!!!!!! r НЕ ОПРЕДЕЛЕННЫЙ ОБЪЕКТ, а не строка, как ожидалось !!!! –

Смежные вопросы