Как я могу заблокировать темы в Javascript? - PullRequest
0 голосов
/ 25 августа 2010

Я хочу заблокировать другие потоки, когда один поток работает.Это возможно в .Net с объектом блокировки.Мне нужно сделать то же самое в AJAX.

    function f_OrnekleriGetir(bKaydet) {

        var ddlKlinikId = "<%=ddlKliniklker.ClientID%>";
        var iKlinikId = $("#" + ddlKlinikId + " option:selected").val();
        var arrOrnekNolar = new Array();
        $(".tdOrnekNo").each(function(idx, td) {
            var sOrnekNo = $(td).html();
            arrOrnekNolar[idx] = sOrnekNo;
        });

        for (var i = 0; i < arrOrnekNolar.length; i++) {

                // i want to wait in here...
                f_OrnekGetirKaydet(arrOrnekNolar[i], iKlinikId, bKaydet);   
            }
        }
    }

Возможно ли это?

KR,

Çağın

Ответы [ 3 ]

2 голосов
/ 25 августа 2010

Вы можете «заблокировать» основной поток с помощью цикла. Здесь есть несколько серьезных недостатков.

  • JavaScript работает в потоке пользовательского интерфейса браузера. Это означает, что пользовательский интерфейс страницы заблокирован до тех пор, пока не завершится исполняемый в данный момент JavaScript, блокируя взаимодействие с пользователем и рендеринг.
  • Некоторые браузеры обнаруживают сценарий, выполнение которого занимает много времени, и спрашивают пользователя, хотят ли они прекратить его выполнение.
  • Операционная система может спросить пользователя, хочет ли он закрыть браузер, если он не отвечает.
  • Без твердого оператора break; , вы можете застрять в бесконечном цикле. Помните, что никакой другой код не будет выполняться (даже обратные вызовы), пока вы не выйдете из цикла. Изменяются только те свойства, которые изменяются асинхронно, например свойство readyState .

Если вы хотите заблокировать поток во время ожидания Ajax-запроса, вы можете отправить запрос синхронно. Однако это будет иметь те же недостатки, что и цикл блокировки.

Как сказал MunkiPhD , вы, вероятно, смотрите на проблему неправильно. Обратные вызовы широко используются в JavaScript, чтобы избежать блокировки потока пользовательского интерфейса, почти гарантируется, что структурирование вашего кода для использования функции обратного вызова в таймере или событии будет работать намного лучше, чем вы думаете в настоящее время.

1 голос
/ 25 августа 2010

Вы не можете выполнять многопоточность в JavaScript. Это все однопоточное.

0 голосов
/ 25 августа 2010

Я не уверен, что вы можете заблокировать потоки в Javascript, но я думаю, что это сводится к проблеме дизайна. Предполагается, что потоки запускаются для процессов, которые могут работать параллельно. Если вы хотите, чтобы поток ожидал ответа от другого потока, то вы смотрите на проблему неправильно.

В любом случае, вы исследовали Web Workers ?

...