2011-08-04 5 views
0

Как сделать блокирующий вызов в javascript?Блокирующий вызов Javascript

В приведенном ниже коде предупреждение в последней строке этого фрагмента кода попадает перед кодом, если блок завершен, что возвращает некоторое значение, вызвав метод chached.get в другом файле js.

var getCachedData = function(_key){ 

    var retStr; 
    if (_key != '' || _key != null) { 
     cached.get(_key, function(data){ 
        if(data){ 
         alert('data = ' +data.value); 
         return data.value; 
        } 
        else{ 
         return undefine;    
        }      
       });     
    } 
    alert('completed'); 
} 

ответ

2

Метод cached.get должен делать что-то в асинхронном режиме. Функция, которую вы передаете этому методу в качестве аргумента, является функцией обратного вызова, которая выполняется после успешного возврата метода get. Если вам нужно запустить код, зависящий от результата вызова до cached.get, вам нужно будет поместить его в этот обратный вызов.

+0

Hey Thanx, Это дало мне лучшую подсказку .. :) – Riz

2

Это будет зависеть от библиотеки (т. Е. Независимо от того, что определяет поведение cached в вашем случае), можете ли вы заблокировать или нет. Вам нужно будет предоставить более подробную информацию о том, что такое cached, или подумайте об этом сами.

Однако, вообще говоря, вы хотите избежать блокировки в Javascript как можно больше, поскольку Javascript работает в потоке пользовательского интерфейса для каждого основного браузера (насколько я знаю).

Вместо того, чтобы рассчитывать на возможность блокировки, перепишите код, чтобы вы использовали data внутри своей функции обратного вызова.

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