2014-01-06 3 views
3

Из моего приложения мне нужно запустить сложную функцию, используя запрос ajax, и в то же время необходимо отобразить модальный div с вращающимся изображением. Я пробовал использовать javascript, который отлично работает в mozilla, но не в chrome. в качестве обходного пути я попробовал веб-исполнителя, как показано ниже.Многопоточная функциональность хром с помощью webworker?

main.js

this.Calculate=function(ii) 
    {   
     worker.postMessage({'cmd': 'start'});  
     myfun.calcfun(ii) 
     worker.postMessage({'cmd': 'stop'});   
    } 
    var worker = new Worker("worker.js");  
    worker.onmessage = function(e) { 
    if(e.data==1 || e.data==0) 
     { 
     if(e.data==0) 
      document.getElementById("divfade").style.display="none"; 
      else if(e.data==1) 
      document.getElementById("divfade").style.display="block"; 
     }  
    } 

worker.js

self.addEventListener('message', function(e) { 
debugger 
    var data = e.data; 
    switch (data.cmd) { 
    case 'start': 
     self.postMessage(1); 
     break; 
    case 'stop': 
     self.postMessage(0); 
    // self.close(); // Terminates the worker. 
     break; 
    default: 
     self.postMessage('Unknown command: ' + data.msg); 
    }; 
}, false); 

Но worker.postMessage ({ 'CMD': 'начало'}); выполненный после myfun.calcfun (ii). поэтому модальный div отображается после завершения выполнения сервера. Любое предложение, чтобы заставить его работать?

ответ

0

Ваша фактическая проблема немного расплывчата, но, похоже, чтобы убедиться, что модальный/прядильщик показывает и прячется в нужное время. Вам действительно нужен рабочий для этого?

Считаете ли вы использование встроенных обещаний jQuery.ajax?

function handler() { 
    // Run code to show modal + spinner 

    // At the same time, fire away a request to the server: 
    var promise = $.ajax({ url: '/url' }); 

    promise.done(function(data) 
    { 
     // Response from server was OK, do your thing 
    }) 
    .fail(function(jQXHR, textStatus, errorThrown) 
    { 
     // Something went wrong, inform your user 
    }) 
    .always(function() 
    { 
     // Run code to hide modal + spinner 
    }); 
} 

И вот a very nice video explaining JavaScript’s event loop, что вызывает блокирование, и какие операции являются по своей природе не блокирует (то есть., Что на самом деле не нужен работник для работы на потоке своих собственных).

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