难以处理由“导入”引起的错误

问题描述

test.js代码

for (let i = 0; i < 10; i++) {
  console.log(i)
  try {
    const j = await import('./errorThrowingModule.js')
  } catch (error) {
    console.dir(error)
  }
}

errorThrowingModule.js的代码

adsfasdfsdafas()

test.js的结果(由Deno运行)

0
ReferenceError: asdfasdfsdafas is not defined
  at file://~~~~~~
1
error: Uncaught ReferenceError: asdfasdfsdafas is not defined
  at file://~~~~~

我猜错了为什么在第二次导入中未捕获到错误的原因,

  1. 导入本身没有错。 (请参阅以下代码以供您理解)
try {
  import('./errorThrowingModule.js')
} catch {
  // it never reaches here
}
try {
  await import('./errorThrowingModule.js')
} catch (error) {
  console.dir(error) // it reaches here
}

当等待诺言被模块抛出的错误拒绝时,会捕获到错误, 不导入自身。

  1. 导入永远不会执行两次。 (这可能不需要进一步说明。)

  2. 等待已经被拒绝的承诺不会导致这种情况的复杂性

try {
  await Promise.reject(new Error())
} catch (error) {
  console.dir(error) // code reaches here
}

我不知道import在第二次运行时的表现如何。

也许是第二次运行,代码根本awaitimport都不是。

我不知道如何有效地处理由模块引起的错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)