一步一步看async&await中异常可以如何处理

Python实战:用nltk库5步搭建你的第一个n-gram文本生成器(附古诗生成案例) 本文详细介绍了如何使用Python的nltk库5步搭建n-gram文本生成器,并附有古诗生成案例。从环境准备、n-gram原理讲解到完整实现,逐步指导开发者掌握自然语言生成技术。特别针对中文古诗生成进行了优化,包括分词处理和韵律控制,帮助读者快速上手文本生成项目。 阅读详情

一步一步看async&await中异常可以如何处理

我们直接看代码

01-基本情况.js

没做任何错误处理的情况,没有try catch也没有.catch,不可取

代码

function  asyncFun(isOk) {
    return new Promise(function (resolve,reject) {
        setTimeout(() => {
            if(isOk){
              resolve('ok')
            }else{
              reject('error')
            }
          }, 3);
    })
  }
async function normalFun(isOk) {
    var res = await asyncFun(isOk)
    console.info(res)
}
   
//正确
normalFun(true)

//错误
normalFun(false)

执行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SodyNGaW-1614059905572)(一步一步看asynca&wait中异常可以如何处理.assets/image-20210223123512308.png)]

结论

这是不可取的

02-0-基本情况-try-catch.js

使用了try catch,这种用法也用的多

代码

function  asyncFun(isOk) {
  return new Promise(function (resolve,reject) {
    setTimeout(() => {
      if(isOk){
        resolve('ok')
      }else{
        reject('error')
      }
    }, 3);
  })
}
async function normalFun(isOk) {
  try {
    var res = await asyncFun(isOk)
    console.info(res)
  } catch (error) {
    console.info('出错了:'+error)
  }
}
 
//正确
normalFun(true)

//错误
normalFun(false)

执行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aFbBC7A5-1614059905574)(一步一步看asynca&wait中异常可以如何处理.assets/image-20210223123655303.png)]

结论

可以的

特殊情况

不过需要知道一点,try catch不是能捕获所有的异常奥

代码-06_try_catch不是可以捕获所有异常.js

async function run() {
  try {
      // 注意这里是return,不是await
      return Promise.reject('error');
  } catch (error) {
      // 代码不会执行到这里
  }
}
run()

/**
try catch不是可以捕获所有异常,不过,一般也不会去写这样的代码
 */

执行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8j9czqsL-1614059905575)(一步一步看asynca&wait中异常可以如何处理.assets/image-20210223123828214.png)]

02-1-基本情况-try-catch-多asynFun-多try.js

使用了try catch,如果包含多个await操作,那就分别需要多个try catch了

代码

function  asyncFun1(isOk) {
  return new Promise(function (resolve,reject) {
    setTimeout(() => {
      if(isOk){
        resolve('ok')
      }else{
        reject('error')
      }
    }, 3);
  })
}
function  asyncFun2(isOk) {
  return new Promise(function (resolve,reject) {
    setTimeout(() => {
      if(isOk){
        resolve('ok')
      }else{
        reject('error')
      }
    }, 3);
  })
}
function  asyncFun3(isOk) {
  return new Promise(function (resolve,reject) {
    setTimeout(() => {
      if(isOk){
        resolve('ok')
      }else{
        reject('error')
      }
    }, 3);
  })
}
async function normalFun(isOk) {
  try {
    var res = await asyncFun1(isOk)
    console.info(res)
  } catch (error) {
    console.info('出错了:'+error)
  }
  try {
    var res = await asyncFun2(isOk)
    console.info(res)
  } catch (error) {
    console.info('出错了:'+error)
  }
  try {
    var res = await asyncFun3(isOk)
    console.info(res)
  } catch (error) {
    console.info('出错了:'+error)
  }
}
 
//正确
normalFun(true)

//错误
normalFun(false)


执行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gm4qvW5q-1614059905576)(一步一步看asynca&wait中异常可以如何处理.assets/image-20210223124222904.png)]

结论

多个try catch,看着代码有点冗余而已,可以理解

03-基本情况-catch.js

可以的

代码

function  asyncFun(isOk) {
  return new Promise(function (resolve,reject) {
    setTimeout(() => {
      if(isOk){
        resolve('ok')
      }else{
        reject('error')
      }
    }, 3);
  })
}
async function normalFun(isOk) {
    var res = await asyncFun(isOk).catch(err=>{ console.info('出错了:'+err);err})
    if(res){
      console.info(res)
    }
}
 
//正确
normalFun(true)

//错误
normalFun(false)

执行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tFiW9j2E-1614059905577)(一步一步看asynca&wait中异常可以如何处理.assets/image-20210223124601287.png)]

结论

可以的

04-基本情况-catch-const.js

.catch操作配合了js的析构赋值

代码

function  asyncFun(isOk) {
  return new Promise(function (resolve,reject) {
    setTimeout(() => {
      if(isOk){
        resolve('ok')
      }else{
        reject('error')
      }
    }, 3);
  })
}
async function normalFun(isOk) {
    const [err, res] = await asyncFun(isOk).then(res => [null, res] ).catch(err => [err, null])
    if(res){
      console.info(res)
    }else{
      console.info('出错了:'+err)
    }
}
 
//正确
normalFun(true)

//错误
normalFun(false)

执行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EWZjKmIl-1614059905578)(一步一步看asynca&wait中异常可以如何处理.assets/image-20210223124633670.png)]

结论

也可以,不过await asyncFun(isOk).then(res => [null, res] ).catch(err => [err, null]),每个异步函数都要这么去调用的话就有点冗余

05-基本情况-catch-const-封装.js

.catch操作配合了js的析构赋值,而且还做了一个封装,调用方便了很多

代码

function to(callback) {
  return callback.then(data => [null, data] ).catch(err => [err, null])
}

function  asyncFun(isOk) {
  return new Promise(function (resolve,reject) {
    setTimeout(() => {
      if(isOk){
        resolve('ok')
      }else{
        reject('error')
      }
    }, 3);
  })
}
async function normalFun(isOk) {
    const [err, res] = await to(asyncFun(isOk))
    if(res){
      console.info(res)
    }else{
      console.info('出错了:'+err)
    }
}

//正确
normalFun(true)

//错误
normalFun(false)

执行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EIkx0DJM-1614059905579)(一步一步看asynca&wait中异常可以如何处理.assets/image-20210223124740725.png)]

结论

可以的,这个也是参考国外的一个博客https://blog.grossman.io/how-to-write-async-await-without-try-catch-blocks-in-javascript/,网上也很多人说这种写法

【unity游戏开发入门到精通——通用篇】Post Processing 后处理插件Post-process Volume 和 Volume最全基础使用说明 之前我已经实现了不少后处理功能,本文其实就是将他们归类整理,以便更好的查找和理解。在Unity中,后处理(Post-Processing)是在相机所捕捉的图像上应用一些特殊效果的过程,后处理会让图像视觉效果更好(前提是做的好)。这些效果的范围有非常细微的颜色调整,也包括整体的美术风格的大修,可以让场景看起来更加真实或风格化,或者只是变得更好看。就像我们都会用手机拍照,但很多时候我们拍的原始的相片都打不到我们想要的效果。比如照片可能亮度不够,颜色不饱和或者对比度不好等。 阅读详情

相关推荐

通达信筹码分布主图源码分享

NOTEXT下区成本:IF(CURRBARSCOUNT<=CONST(XA_26+1),CONST(IF(1,XA_94,XA_94)),DRAWNULL),DOTLINE,COLORYELLOW;NOTEXT上区成本:IF(CURRBARSCOUNT<=CONST(XA_26+1),CONST(IF(1,XA_81,XA_81)),DRAWNULL),DOTLINE,COLORRED;FFG1:DRAWBAND(C线,RGB(255,0,0),XA_33,RGB(255,0,0));

zhibiaogong的博客 3361

async/await以及错误处理

1. async 1.1 async可以修饰函数表达式、函数声明、箭头函数和方法 let func = async function(){} //函数表达式 async function foo(){} //函数声明 async () => {} //箭头函数 class Person{ async methodA(){} //方法 } 1.2 async里面的代码还是同步执行的 async function foo(){ console.log(2) return 3 } foo

soputasmile的笔记 8611

FOC:【1】浅析SVPWM算法(七段式)以及MATLAB仿真验证

最近的科研项目需要使用到SVPWM算法,网上相关的原理介绍很多。对于纯应用的需求来说,或许有些内容上的冗余。 本文的目的就是简要并且明确的给出具体的计算步骤,可以帮助快速上手。同时利用MATLAB进行了简单算法验证。.....................

Alex的技术博客 1万+

c# 第五课 async await

Async 方法有三种可能的返回类型: Task、Task<T> 和 void,但是 async 方法的固有返回类型只有 Task 和 Task<T>。 当从同步转换为异步代码时,任何返回类型 T 的方法都会成为返回 Task<T> 的 async 方法,任何返回 void 的方法都会成为返回 Task 的 async 方法。...

dicheng6608的博客 301

星空组网 vs 蒲公英 vs Tailscale:2024年国内免费异地组网工具横评(含实测数据)

本文对2024年国内主流免费异地组网工具星空组网、蒲公英和Tailscale进行了深度横向评测。基于实测数据,重点分析了三者在P2P成功率、中继延迟、传输速度及稳定性方面的表现,为中小企业、远程办公及个人开发者提供了清晰的选择指南。星空组网在国内网络环境下展现出优秀的平衡性。

weixin_29217235的博客 1444

借助Gemini 3 Pro高效解决课题申报中的五大核心痛点,亲测有效经验分享

之前给大家分享过关于AI辅助课题申报的相关的内容,涵盖了申报书部分撰写技巧,但没针对性拆解各位同仁在实际申报时遇到的卡壳的地方。比如选题范围拿捏不准,定的太大,根本没法落地完成;定的太小,研究价值则体现不了;写综述时,容易单纯罗列文献,缺乏批判性视角,没办法自然融入自己的判断,找不到研究缺口;研究方法部分,可能担心方法设计不够严谨,别人难以复现.....针对这些申报中的高频痛点,接下来七哥会从五个核心要点出发,借助Gemini 3 Pro高效解决这些痛点。

智能AI让学术科研更容易 701

如何给所有的async函数添加try/catch?

阿里三面的时候被问到了这个问题,当时思路虽然正确,可惜表述的不够清晰后来花了一些时间整理了下思路,那么如何实现给所有的async函数添加try/catch呢?通过开发这个插件,了解很多 AST 方面的知识,掌握了一些 babel 的原理友情提醒:不要在生产环境中使用该插件,该插件的功能还太过简陋。实际开发中,大家可以结合具体的业务需求开发自己的插件,一起动手玩一玩 babel如果你现在正在找工作,可以私信“web”进群领取前端面试小册以及更多阿里、字节大厂面试真题合集,和p8大佬一起交流。

Web面试那些事儿的博客 1373

[网络安全自学篇] 七十三.WannaCry勒索病毒复现及分析(四)蠕虫传播机制全网源码详细解读

这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步。前文分享了逆向分析OllyDbg动态调试工具的基本用法,包括界面介绍、常用快捷键和TraceMe案例分析。这篇文章将继续详细讲解WannaCry蠕虫的传播机制,带领大家详细阅读源代码,分享WannaCry勒索病毒是如何传播感染的。作者分析该病毒一个月,一方面觉得自己技术菜,另一方面深知系统安全需要坚持,继续加油。希望文章对您有所帮助~

杨秀璋的专栏 1万+

async_await异常捕获

不知道大家项目里面是怎么处理 async/await 的异常,我斗胆在我们项目里翻了一下,发现大量使用 try-catch 来处理 async/await 异常。首先说明一下, try-catch 处理并没有什么问题,我只是觉得这么写代码会有点乱,感觉代码逻辑像是断层了一样,不易理解;其次是代码冗余问题,单个 try-catch 就占了好几行代码,如果每个请求的地方都添加 try-catch,就会显得代码很臃肿。而对于这种大量相同的冗余代码,完全可以用一种通用的函数来替代。

前端开发工程师博客 1885

AutoSAR_BSW高阶 7. Signal Group 信号组

Autosar BSW的高级配置是实现复杂汽车电子系统的关键步骤之一。通过合理配置信号组和使用适当的参数,您可以提高系统性能,确保数据的可靠传输。在本博客中,我们深入探讨了信号组的概念和高级配置参数,并提供了示例代码,希望这些信息能够帮助您更好地理解和应用Autosar BSW的高级配置。如果您在配置过程中遇到任何问题,不妨寻求专业支持,以确保您的汽车电子系统能够顺利运行。Autosar COM 模块是一个广泛应用于汽车行业的关键技术,它使不同的电子控制单元能够有效地通信和协作。

一直在水些技术小文 663

破解现代反爬虫:JS加密、OB混淆与CSS反爬的实战攻防分析

摘要: 随着反爬技术的升级,JS加密、OB混淆和CSS反爬成为主流防护手段,阻碍传统爬虫获取数据。本文解析了这些技术的工作原理,并提出破解策略:通过模拟浏览器(如Selenium、Puppeteer)执行动态JS,逆向混淆代码,以及利用开发者工具突破CSS隐藏。针对复杂防护,开发者需结合技术分析与工具应用,如API接口抓取、动态渲染破解等,以应对不断演进的反爬机制。未来,爬虫攻防将持续升级,需保持技术敏锐性。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1652

async-await与try-catch

表示函数里有异步操作,async函数可以理解多个异步操作包装成的promise对象返回值:promise对象 函数add的返回值会成为then中回调函数的参数,如果add函数内部有错误或主动抛出错误,返回的 promise会是rejected状态,会被catch接收到作用:1》一是作为求值关键字;.then的语法糖,可以拿到promise的结果2》二是将异步操作变成同步操作;await后面的代码执行时机一定是在await之后;try、catch只能捕获同步错误,那么怎么捕获promise中的错误呢

weixin_小白鼠的博客 4873

智能车图像处理0-图像处理整体框架思路

1.总体框架如上所示,具体代码请查看后续文章。2.因为参与竞赛时间是大二,所以在编程中有许多不规范的地方(如变量的命名),大家见谅。3.原创文章,请勿侵权=-=

taiyuezyh的博客 1万+

async&await

async: async的用法,它作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思, 异步函数也就意味着该函数的执行不会阻塞后面代码的执行。 1.可以作用在任何方法前,返回值是一个Promise对象(回调函数也可以使用async) var fn=async()=>{ return 111 } console.log(fn());//promise 返回值如下图: 2.函数内部return的返回值,会成为then回调函数的参数 ..

wgjiayin的博客 1317

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

这次彻底搞懂async&await

1.async 函数返回一个promise对象,可以使用then方法添加回调函 async function show() { return {a:23,b:34} } console.log(show()) // //Promise {<fulfilled>: {…}} show().then(res=>{ console.log('res',res) // res {a: 23, b: 34} }) 2.await 关键字存在async函数表达式中,用于等待Pro

车联网开发的博客 386

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Async&await和promise有什么区别?

Async&await和promise有什么区别?

jsjbdndn的博客 475

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

登陆模块(五) -登录-async&await使用--捕获异常 try和catch

登录-async&await使用 // 使用 async await 发请求 // 解构赋值 // 得到 用户 信息 res.data.data res = {data:{data:'用户信息',message:'提示'}} // 以前获取对象中的属性值:res.data ={data:'用户信息'} // ES6提供解构赋值语法:{data:{data:data}} // 捕获异...

weixin_44867717的博客 973

异步编程(async&await)转载自博客园Jonins的博文

关于Sync Context 的讨论: https://stackoverflow.com/questions/18097471/what-does-synchronizationcontext-do 原文链接: https://www.cnblogs.com/jonins/p/9558275.html 异步编程(async&await) 前言 本来这篇文章上个月就该发布了,但是因...

诸葛建站 263

异步编程(async&await)

前言 本来这篇文章上个月就该发布了,但是因为忙 QuarkDoc 一直没有时间整理,所以耽搁到今天,现在回归正轨。 C# 5.0 虽然只引入了2个新关键词:async和await。然而它大大简化了异步方法的编程。 在线程池(threadPool)大致介绍了微软在不同时期使用的不同的异步模式,有3种: 1.异步模式 2.基于事件的异步模式 3.基于任务的异步模式(TAP) 而最后...

weixin_30889885的博客 218

ES6中Promise、async&await从入门到精通!

1、Promise 对象 ①:Promise可以看作为一个容器,容器内部装着未来才会结束的异步操作; ②:Promise用于三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败); ③:状态一旦开始,只有两种可能:从 pending 变为 fulfilled 和从 pending 变为 rejected,且只会有一个最终结果; ④:Promise对象是...

米斯特曹 1625

理解Koa2中的async&await

Koa是一款非常著名的Node服务端框架,有1.x版本和2.x版本。前者使用了generator来进行异步操作,后者则用了最新的async/await方案 一开始使用这种写法的时候,我遇到一个问题,代码如下: const Koa = require('koa'); const app = new Koa(); const doSomething = time =&gt; { return...

weixin_33785108的博客 257

await-async异步任务解决方案

await-async异步任务解决方案 async functions 和 await 关键字是最近添加到JavaScript语言里面的。是ECMAScript 2017 JavaScript版的一部分。 简单的说,它们是基于promise的语法糖,是异步代码更易于编写和阅读。 async async function返回的是一个promise。按照文档释义:async函数是使用async关键字声明的函数。async函数是asyncFunction构造函数的实例,并且其中允许使用await关键字。 fun

weixin_41993525的博客 368

Java->Dart入门(一)

Dart关键词

weixin_45392643的博客 832

深度详解Promise

Promise之执行器 本质上Promise就是一个构造函数。 Promise的实例对象有三个状态 pending: 初始状态,既不是成功,也不是失败状态。 fulfilled: 意味着操作成功完成。(resolved) rejected: 意味着操作失败  Promise语法 new Promise( function(resolve, reject) {…}); //第一个参数一般我们称为executor //实例 var promise = new Promise(function(resolve

aiyx16521的博客 282

async/await与promise

async 会将其后的函数的返回值封装成一个 Promise 对象,而 await 会等待这个 Promise 完成,并将其 resolve 的结果返回出来。( Promise 的特点——无等待),所以在没有 await 的情况下执行 async 函数,它会立即执行,返回一个 Promise 对象,并且,绝不会阻塞后面的语句。async 是“异步”的简写,而 await 的意思是等待,async/await 是建立在 promise 的基础上, 像 promise 一样,也是非阻塞的。......

weixin_43801836的博客 1485

async 和 await(详解)

async 和 await(详解)

阿小绿的博客 2902
上一篇: mysql5.7 解压版安装
下一篇: mysql-损坏怎么回复
billycoder
博客等级 码龄17年 171粉丝 188原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值