即使文件路径无效,web worker 构造函数也不会失败
Posted
技术标签:
【中文标题】即使文件路径无效,web worker 构造函数也不会失败【英文标题】:web worker constructor does not fail even with invalid file path 【发布时间】:2018-05-15 21:33:27 【问题描述】:我在与 webpack 3 捆绑的 web 文件中有此代码:
let _worker = new Worker("x.js")
_worker.addEventListener('message', (event) =>
resolve(event.data as any)
);
无论我将什么路径传递给构造函数,worker 创建总是成功的。这怎么可能?
【问题讨论】:
【参考方案1】:这怎么可能?
因为它是异步的。您不希望您的主 javascript 线程坐在那里,被阻塞,等待浏览器从服务器获取脚本文件。所以它是异步完成的。
如果您侦听 worker 的 error
事件,您将收到使用无效路径创建的 worker。
这在标记为 “当调用 Worker(scriptURL) 构造函数时,用户代理必须运行以下步骤:”的步骤列表中包含in the spec,其中没有列出任何关于获取 URL 的浏览器。
最后一步是run a worker,开头是这样的:
创建单独的并行执行环境(即单独的线程或进程或等效结构),并在该上下文中运行其余步骤。
...
令request为url为url的新请求...
设 response 为获取请求的结果。
如果响应响应的状态是正常状态...
否则,对于每个与 worker 全局范围关联的 Worker 或 SharedWorker 对象,排队一个任务以在该对象上触发一个名为
error
的简单事件。中止这些步骤。
【讨论】:
但是我曾经在路径无效时在浏览器控制台中收到错误(例如:找不到路径 xxx”);现在不会发生这种情况 @prmph:您的服务器是否设置为对无效 URL 提供默认响应?如果我在 SO 上执行new Worker("fooalskdjflaskdf.js").onerror = function(e) console.log("failed", e); ;
,我会从网络工作者那里得到错误,然后是Uncaught SyntaxError: Unexpected token <
,因为 SO 会响应一个页面(而不是应该的 404)。但是,如果我在服务器响应 404 的站点上执行此操作,我会在控制台中收到错误消息。另请注意,大多数控制台都有过滤选项,您可能错误地打开了一个。无论如何,如果响应不是有效的 JavaScript,您将收到 worker 错误。
那么如何创建一个worker,并且只有在确保它被正确创建后才能继续呢?你能发布一个简短的 sn-p 来说明这一点吗?
@prmph:我会通过处理error
事件和message
事件来做到这一点,并让工作人员在加载和初始化时发送一条消息。你可能会抛出一个超时,但我希望 error
或工作人员运行(因此如果它运行它可以发送消息)。以上是关于即使文件路径无效,web worker 构造函数也不会失败的主要内容,如果未能解决你的问题,请参考以下文章
ColdFusion CFFILE 重命名属性验证错误,属性源的值无效,即使文件存在且路径正确