Javascript 难以处理由'引起的错误;导入&x27;

Javascript 难以处理由'引起的错误;导入&x27;,javascript,error-handling,es6-modules,deno,Javascript,Error Handling,Es6 Modules,Deno,test.js的代码 for (let i = 0; i < 10; i++) { console.log(i) try { const j = await import('./errorThrowingModule.js') } catch (error) { console.dir(error) } } test.js的结果(由Deno运行) 我猜测在第二次导入中没有捕获错误的原因如下 导入本身没有什么问题。(查看以下代码以了解您的理解) 等待承诺被模

test.js的代码

for (let i = 0; i < 10; i++) {
  console.log(i)
  try {
    const j = await import('./errorThrowingModule.js')
  } catch (error) {
    console.dir(error)
  }
}
test.js的结果(由Deno运行)

我猜测在第二次导入中没有捕获错误的原因如下

  • 导入本身没有什么问题。(查看以下代码以了解您的理解)
  • 等待承诺被模块抛出的错误拒绝时捕获错误, 不进口自己

  • 导入不会执行两次。 (这可能不需要进一步解释。)

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

  • 我不知道第二次运行时,
    import
    是如何工作的

    也许在第二次运行时,代码根本不会等待导入


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

    这在我看来像是Deno中的一个bug。您的第一个代码片段确实应该可以工作,并将同一错误记录十次。它可能与
    导入
    或顶级
    等待
    有关。谢谢。也许我应该使用
    新函数
    来绕道这个问题。或者确保导入文件没有错误是的,尝试将其放入一个
    异步函数中
    ,以查看行为是否发生变化-这将使其成为tla错误。我将稍后再试。非常感谢。可能是导入本身的问题。用
    async
    函数包装不起作用这在我看来像是Deno中的一个bug。您的第一个代码片段确实应该可以工作,并将同一错误记录十次。它可能与
    导入
    或顶级
    等待
    有关。谢谢。也许我应该使用
    新函数
    来绕道这个问题。或者确保导入文件没有错误是的,尝试将其放入一个
    异步函数中
    ,以查看行为是否发生变化-这将使其成为tla错误。我将稍后再试。非常感谢。可能是导入本身的问题。使用
    async
    函数包装无效
    adsfasdfsdafas()
    
    0
    ReferenceError: asdfasdfsdafas is not defined
      at file://~~~~~~
    1
    error: Uncaught ReferenceError: asdfasdfsdafas is not defined
      at file://~~~~~
    
    try {
      import('./errorThrowingModule.js')
    } catch {
      // it never reaches here
    }
    
    try {
      await import('./errorThrowingModule.js')
    } catch (error) {
      console.dir(error) // it reaches here
    }
    
    try {
      await Promise.reject(new Error())
    } catch (error) {
      console.dir(error) // code reaches here
    }