zoukankan      html  css  js  c++  java
  • javascript中优雅的处理async和await异常

    let handler = async function(needErr) {
        return new Promise((resolve, reject) => {
            if (needErr) {
                reject(new Error('执行失败,给出错误'))
            } else {
                resolve('执行成功,没有报错')
            }
        })
    }
    
    let run = async function() {
        let result = await handler(false).catch();
        console.log(result);
        result = await handler(true).catch();
        console.log(result);
    }
    
    run();

    输出:

    执行成功,没有报错
    (node:3428) UnhandledPromiseRejectionWarning: Error: 执行失败,给出错误

    async函数总是返回promise实例

    无论是return了Promise,
    还是内部调用了await,
    就算什么也没做,它也返回promise;
    一个函数,只要被标记了async,那么它就返回Promise对象
    所以上面的handler函数返回的是一个promise实例

    如果一个 async 函数返回的是一个 reject 的 Promise,那么这个 Promise 依然会继续被 reject。

    这行代码:let result = await handler(false).catch();
    返回的是resolve状态的promise
    result = await handler(true).catch();
    返回的是reject状态的promise

    await一个resolve状态的promise,无论有没有catch,都直接得到结果
    await一个reject状态的promise,catch会抓住异常,返回异常结果
     

  • 相关阅读:
    Jdbc增删改查的相关操作(Oracle 数据库环境)
    java
    今日随笔
    爬虫之链家网
    爬虫之搜狗
    【题解】「UVA1149」装箱 Bin Packing
    【题解】「SP34013」SEUG
    【题解】「SP867」 CUBES
    【题解】NOI 系列题解总集
    APIO2019简要题解
  • 原文地址:https://www.cnblogs.com/liulun/p/11516014.html
Copyright © 2011-2022 走看看