Принудительное выполнение функции на стороне клиента выполняется асинхронно или через некоторое время отключить функцию синхронизации. - PullRequest
1 голос
/ 17 июня 2019

Я выполняю библиотечную функцию на стороне клиента, которая является синхронной по своей природе, поэтому, когда она выполняется, она блокирует весь поток пользовательского интерфейса.Я попытался обернуть все в обещание, но это все еще не решает проблему, которая, как я предполагаю, заключается в том, что обычно асинхронная функция в обещании выполняется где-то еще (т.е. на стороне сервера или стороннего API), но эта функция выполняется в моем браузере.

Я хочу не блокировать браузер до тех пор, пока этот libfunc не будет запущен или, возможно, не завершит работу libFunc через некоторое время.

function foo(){
    return new Promise((resolve,reject)=>{
       try{
         library.libFunc();
         resolve();     
       }catch(e){
         reject(e);
       });

}

function someFunc(){
    foo()
    .then(function(result){
       console.log('hey');
    })
    .catch(function(e)){
     console.error(e);
    });
    $timeout(function(){
         console.log('hey'
    },5000);
}

Он никогда не печатает эй, пока libFunc () не завершится.

1 Ответ

0 голосов
/ 17 июня 2019

Рассмотрите возможность использования веб-работников

Из документов:

Web Workers - это простой способ для веб-контента запускать сценарии в фоновых потоках. Рабочий поток может выполнять задачи без вмешательства в пользовательский интерфейс. Кроме того, они могут выполнять ввод / вывод, используя XMLHttpRequest (хотя атрибуты responseXML и channel всегда равны нулю). После создания работник может отправлять сообщения в код JavaScript, который его создал, отправляя сообщения обработчику событий, указанному в этом коде (и наоборот).

Если вам нужно немедленно прекратить работающего работника из основного потока, вы можете сделать это, вызвав у работника terminate метод.

Для получения дополнительной информации см.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...