VPS参考测评推荐
专注分享VPS主机优惠信息
衡天云优惠活动
荫云优惠活动
wexlayer优惠活动
最新

如何优雅地捕获小程序中异步方法中的异常(小程序事件捕获)

主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情!
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作

如何在原生小程序中优雅地捕获异步方法中的异常?在下面的文章中,我将向您介绍async wait异步编程在小程序中的优雅使用。 我希望这有帮助!

我最近开始编写一个开源云开发社区小程序。 在写作过程中,我慢慢探索了一些有助于开发和测试过程的技巧。 擅长。 本文介绍如何在原生小程序中的异步方法中优雅地捕获异常。

传统方式

从 ES7 开始,async wait 语法经常用于异步编程。 如果要捕获异常,通常有两种方法: try catch

async func(){ //do some}try { const res = wait func()} catch (error) { //handle error}首先是try catch捕获异常。 其实用try catch也是可以的。 这对于处理异常非常有用,也可以阻止后续方法继续执行。 然而,在开发过程中你经常会遇到多种异步方法并大量使用try catch。 不仅文笔不好,而且一点也不优雅。

Promise.catch()

async func(){ //做某事} const res = wait func().catch(error=>{ //处理错误})

Promise 对象内部有一个 try catch,允许您使用链式调用方法处理异常。 与Try catch相比,Promise.catch()当然更容易编写,看起来也更优雅。

但是,如果您想在捕获错误后停止方法执行,Promise.catch() 不允许您这样做,如下例所示。

async func(){ //做某事 }const res =wait func().catch(error=>{ // 即使返回也无效 return})// 如果出现错误,优雅的方式不会执行 wait-to-js github 链接 https:// Github. com/scopsy/await-to-js

await-to-js 很多人应该都知道这个库。 异步请求的包装器。 可用于处理异步请求中的错误。 根据上述需求更改为使用await-to-js。 一个例子是:

import to from 'await-to-js';async func(){ //做某事}const [err,res] = wait to(func())if(err){ / /处理错误 return}// 有错误则不执行

异步方法如 to() 方法的参数和返回值都是通过分割数组得到的。 数组中的第一个值是捕获的错误,第二个值是正常执行的返回值。

await-to-js 的实现原理也很简单。 即使用 Promise.catch() 捕获异常并将结果以数组形式返回。 这是源代码:

导出函数到 (promise: Promise,errorExt?: object ): Promise {return Promise .then((data: T) => [null, data]) .catch((err: U) => {if (errorExt) { const parsedError = Object.assign({}, err, errorExt); returnn [parsedError, undefined];} return [err, undefined] });

对于小程序来说,使用npm包不方便,可以直接拿源码自己使用。 解决这个问题可以让您优雅地执行异步编程。 我的修改方法如下。

// lib/awaitTo.jsmodule.exports = function to(promise, description="unknown") {const Pages = getCurrentPages()const Route = Pages[pages.length - 1].route|| '未知'描述 = `[${路线}]---[${描述] }]`console.time(description)return Promise.then(function (data) {console.timeEnd(description)return [null, data];}).catch(function (err) {wx.showToast({title: '请求失败',icon: "none"})return [err,unknown];});}

我使用 getCurrentPages() 传递相应的页面 扎根。 执行异步方法。 如果将第二个参数改为异步方法描述,则每次调用异步方法时都会将执行时间打印到控制台。 实际使用示例如下:

const to = require("../../lib/awaitTo")const [err, res] = wait to(db.collection("post").add({ data: form}),"addPost")if (err) { // 处理错误返回}//成功后执行的逻辑

控制台打印的执行时间输出如下: 输出格式为:

当然,我的封装方式是针对我自己的代码,你也可以在基础上进行修改。 针对实际业务,统一嵌入点入口,大大提高开发效率!

总结

使用云开发时,需要使用母语来获得开发经验。 很多Web端的方法在相对封闭的环境下已经不可用了。 我在最近的探索中发现了很多这样的东西。 如何提升原生小程序开发体验,后续会更新。

【相关学习推荐:小程序开发教程】

PHP轻松学习视频免费教程(从初学者到专家)

如何学习PHP PHP应该从哪里开始?我学PHP怎样才能快速学好PHP呢? 这里有简单的 PHP 学习教程(从初学者到专家)。 您可以保存并下载您想学习的朋友。

下载

这几篇文章你可能也喜欢:

本文由主机参考刊发,转载请注明:如何优雅地捕获小程序中异步方法中的异常(小程序事件捕获) https://zhujicankao.com/142752.html

【腾讯云】领8888元采购礼包,抢爆款云服务器 每月 9元起,个人开发者加享折上折!
打赏
转载请注明原文链接:主机参考 » 如何优雅地捕获小程序中异步方法中的异常(小程序事件捕获)
主机参考仅做资料收集,不对商家任何信息及交易做信用担保,购买前请注意风险,有交易纠纷请自行解决!请查阅:特别声明

评论 抢沙发

评论前必须登录!