Uncaught NetworkError:无法在'WorkerGlobalScope'上执行'importScripts'

use*_*649 9 javascript web-worker

我试图使用importSctipts从Web worker导入json数据,发生以下错误.

Uncaught NetworkError:无法在'WorkerGlobalScope'上执行'importScripts':无法加载(my:用于从服务器获取数据的URL)的脚本.

Web worker代码在这里.我能够从我的web工作线程和主js线程发送基本消息.我想从我的服务器从Web工作线程中获取jsonp数据,然后回复主js线程.

/*web worker js file to fetch json data from server and then return to main javascript thread*/

self.onmessage = function(e)
{
    var curr = setInterval(function()
    {

         var message = e.data;     
            fetchMyTournament(message);

    }, 10000);
}



function fetchMyTournament(userid)
{
    self.postMessage('worker saying hi');


    var url = "(server URL mapping)?callback=processInfo&type=(typeOfArgument)&userId="+userid;



               importScripts(url);
            self.postMessage("After import script");



}
function processInfo(objJSON) 
{

    self.postMessage("Data returned from the server...: " 
                  + JSON.stringify(objJSON));
} 
Run Code Online (Sandbox Code Playgroud)

小智 6

对于我的情况,我像这样导入 PouchDB: importScripts("//cdn.jsdelivr.net/pouchdb/5.3.1/pouchdb.min.js");

url 应以正确的 http/https 开头。所以改成这样就解决了问题: importScripts("https://cdn.jsdelivr.net/pouchdb/5.3.1/pouchdb.min.js");


小智 5

importScript() 必须放置在函数之外。对于您的情况,您应该使用 fetch(url)。您还应该向每个函数添加 async,并以这种方式使用它:

let message = fetchMyTournament(message).then(function(result){return result;});
Run Code Online (Sandbox Code Playgroud)