跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教 js 中如何优雅的处理异步异常?
未分類
6 4 月 2020

请教 js 中如何优雅的处理异步异常?

请教 js 中如何优雅的处理异步异常?

資深大佬 : rioshikelong121 60

  setTimeout(() => {     throw new Error("Whoops!");   }, 1000);  

比如上述场景, 外层的 try-catch 等方式肯定是无法处理的,不考虑 window.onerror.

除了使用使用 Promise.reject 改写上述代码为

  new Promise((resolve, reject) => {    setTimeout(() => {     reject("Whoops!");   }, 1000);  }).catch(/* errorHandle */)  

或者在 setTimout 内部 try-catch 以外,还有什么方案么?

大佬有話說 (17)

  • 資深大佬 : H15018327040

    async/await?

  • 資深大佬 : maichael

    setTimeout(() => {
    try {
    throw new Error(“Whoops!”);
    } catch {
    // handle error
    }
    }, 1000);

    这样?

  • 資深大佬 : Vegetable

    async/await+trycatch

  • 資深大佬 : Vegetable

    哦还有 promiss

  • 資深大佬 : Vegetable

    e..

  • 資深大佬 : fool079

    async + try catch

  • 資深大佬 : zhw2590582

    还有个不优雅写法
    window.addEventListener(‘unhandledrejection’, function(err) {});

  • 主 資深大佬 : rioshikelong121

    @zhw2590582 根据我的理解, 这个写法还得用 Promise 包装一下, 普通的 setTimeout 内抛出的异常是触发不了的。浏览器环境得用 onerror, node 环境得用 process.on(‘uncaughtException’)

  • 主 資深大佬 : rioshikelong121

    @Vegetable 恩 貌似引入 async/await 是个方法。

  • 資深大佬 : zaul

    promise 深入了解下

  • 主 資深大佬 : rioshikelong121

    这么多人不看描述的 🙂

  • 資深大佬 : SorcererXW

    async function sleep(timeout){
    return new Promise(resolve=>setTImeout(timeout, resolve))
    }

    new Promise((resolve,reject)=>{
    await sleep(1000)
    try{
    throw new Error(xxxx)
    }catch(e){
    reject(e)
    }
    })
    .then()
    .catch()

  • 資深大佬 : SorcererXW

    在一个 promise 里面直接同步等完这 1 秒,再让 reject 处理掉抛出的 error

  • 資深大佬 : liuzhaowei55

    如果不是异常→返回这种开发模式,就尽量把逻辑完善了,测试做到位,剩下的异常异常不优雅也无所谓

  • 資深大佬 : autoxbc

    js 的异常捕获包括 try catch 和 promise.catch 都是纯正的同步异常捕获,js 里没有真正意义上的异步异常捕获

    我猜语言设计者想保证流程控制的简单性和可预测性,换句话说,在异步流程的同步部分捕获异常更优雅

  • 資深大佬 : redbuck

    好玩一点的玩法可以写个 babel 插件,自动插入错误处理逻辑

  • 資深大佬 : KuroNekoFan

    就用 promise catch 吧
    我始终认为 promise 比 async/await 的语法在控制粒度上更细

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具