javascript - 通过 import() 检索模块时捕获 403 错误

标签 javascript

这是一个非常简单的问题,所以我很惊讶我在这里找不到它。

假设我有以下导入模块的代码:

import("mymodule.js").then(module => {
    // Use module
}).catch(e => {
    // Handle error
});

因此,我希望在无法检索资源等情况下这将失败,这将得到处理。但是,如果请求收到 403,我会在控制台上收到“GET mysource.js net::ERR_ABORTED 403”错误。一旦请求被缓存,错误就不再出现在每个 import() 上。

我打算使用 import() 来检查模块是否存在并检索它,所以我现在的问题是:

  1. 对可能不存在/不可访问的资源使用 import() 是不好的做法
  2. 我是否必须在运行导入之前尝试直接获取资源以避免看似未处理的 403 错误。

最佳答案

根据draft spec text ,如果 import 失败,promise 必须被拒绝。如果您没有看到这一点,那么任何为您处理动态 import 的内容都没有遵循建议的规范文本。

也就是说,我无法在 Chrome v78 中复制它。我设置了一个 Express.js 服务器并为该模块提供 403 回复。我正确地得到了拒绝。这是我在客户端上使用的代码:

function tryIt(label) {
    import("./alskdfmod.js")
    .then(() => {
        console.log(`${label}: Worked`);
    })
    .catch(e => {
        console.log(`${label}: Failed: ${e.message}`);
    });
}
tryIt(1);
setTimeout(() => {
    tryIt(2);
}, 1000);

我都被拒绝了,1 和 2。

my question now is whether:

  1. Using import() on resources that may not exist/are inaccessible is bad practice

从某种意义上说,这就是它的目的。

  1. Would I have to try to get the resource directly before running import to avoid the seemingly unhandled 403 error.

你不应该需要。我会更仔细地查看您的代码,您应该会收到 403 的拒绝(以及 404 和任何其他无法获取模块的错误)。


在您的评论中:

I am getting the rejection, but I'm still getting the error in the console.

啊!我误解了这个问题。是的,网络错误总是在 Chrome 的控制台中显示为错误。 (如果您导航到没有 favicon 的站点,您也会看到 favicon.ico 的 404。)您可以安全地忽略它。如果您没有处理该错误,您会看到一个第二个错误,表示未处理的拒绝。

关于javascript - 通过 import() 检索模块时捕获 403 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58996040/

相关文章:

javascript - 如何使用 AngularJs 和 Bootstrap 创建选项卡 - 需要修改现有代码

javascript - Ajax 404(未找到)循环遍历

javascript - 通过javascript函数改变颜色

javascript - 如何使用 Clearscript 将 CLR 类型的 native JS 数组转换为 CLR 数组

javascript - 为什么我的 jQuery 转换有问题?

javascript - 如何将整个页面保存为一个文件以便离线工作(包括外部 javascript)?

javascript - 不带 eval 的字符串到变量名

javascript - 在 Dynamics CRM 2016 中使用 JavaScript 启动工作流程

php - 在 IE7 中刷新或清除 Ajax "temp"内容的最佳方法

javascript - 鼠标悬停时开始幻灯片放映