如何更好地处理 async-await 中的错误

原文链接:https://blog.grossman.io/how-to-write-async-await-without-try-catch-blocks-in-javascript/

async / await 函数中,通常使用 try / catch 来捕获错误。代码像下面这样:

async function asyncTask(cb) {
  try {
    const user = await UserModel.findById(1);
    if (!user) return cb('No user found');
  } catch (e) {
    return cb('Unexpected error occurred');
  }

  try {
    const savedTask = await TaskModel({ userId: user.id, name: 'Demo Task' });
  } catch (e) {
    return cb('Error occurred while saving task');
  }

  if (user.notificationsEnabled) {
    try {
      await NotificationService.sendNotification(user.id, 'Task Created');
    } catch (e) {
      return cb('Error while sending notification');
    }
  }

  if (savedTask.assignedUser.id !== user.id) {
    try {
      await NotificationService.sendNotification(savedTask.assignedUser.id, 'Task was created for you');
    } catch (e) {
      return cb('Error while sending notification');
    }
  }

  cb(null, savedTask);
}
阅读更多

React 函数式组件的性能优化

不论是类组件还是函数式组件,React 性能优化的主要方向有下面几个:

  • 减少重新 render 的次数
  • 减少计算量
  • 减少渲染的节点、降低渲染量
  • 合理设计组件

一、减少重新 render 的次数

React 中最重的(时间开销最大的)一块就是 reconciliation ,翻译为调和、和解。reconciliation 的最终目标是以最有效的方式,根据新的状态来更新 UI,我们可以简单地理解为 diff。如果不发生 render,就不会发生 reconciliation

阅读更多

瀑布与敏捷

每个软件开发项目都需要一种管理方法,来保证项目能够成功交付。在项目管理中,最具挑战性的问题之一就是:该如何选取正确的管理方式来让团队在舒适的环境中开发软件并取得成功呢?这是一个关于方法论的讨论。

在现代软件开发行业中,有两种最基本和最流行的项目管理方法:

  • 瀑布(Waterfall),也被称为「传统的软件开发方法」;
  • 敏捷(Agile),这种管理方法比瀑布模式更新。

接下来我们来看看瀑布式和敏捷式的区别。

阅读更多

一、内存

Javascript 程序的运行,不管是依赖于浏览器还是 Node.js 环境,最终的运行都依赖于操作系统,而操作系统的运行依赖于计算机硬件资源。使用 Javascript 语言开发的程序最终会变成一条条指令和数据,要依赖于计算机硬件的执行和存储。

比如两个变量执行加法运算, 就需要 CPU 运算单元的加法器提供支持,而参与运算数据的存储就要占用内存空间。

当然,计算机的硬件资源(CPU 的运算资源和缓存空间、内存条的内存空间等等)是有限的,不可能无限制的使用。所以,程序运行的时候产生的一些没用的中间数据,要及时的清理掉,释放出空间,留出的空间用以存储其他数据,这就是所谓的垃圾回收

举个简单的例子:

我们要计算 1+2+4 的结果,那么 1+2 的和 3 就是一个临时数据,只用到它来加 4 得到最终结果 7 存在内存中,之后 3 就不会再占用具体的内存空间了。

阅读更多

Wepack 性能优化

本篇文章我们一起来看看 Webpack 的性能优化相关内容。在这之前,再简单介绍下 Webpack 的一些相关概念。

一、webpack 是什么?

webpack 是一种前端资源构建工具,它是一个静态模块打包器module bundler)。在 webpack 中,前端的所有资源文件(javascript/json/css/img/less/...)都会作为模块处理,当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle

image-20200511205102019

(图片来自网络)


阅读更多

一、CircleCI 介绍

首先介绍一下 CircleCIhttps://circleci.com。

CircleCI 是一款 SaaS (软件即服务,Software-as-a-service) 服务,它是一个提供持续集成和持续交付(CICD)的工具。因为是一款 SaaS 服务,所以我们不用维护相关的服务器,只用关注在编码层面就好了。

CircleCI 支持 GitHubBitbucket 帐号的登录,授权登录完成后,就可以添加 Projects 了,支持 GitHubBitbucket 的公有及私有仓库。

CircleCI 需要付费的主要是它的容器。你可以免费使用一个容器,当你开始使用更多容器的时候,你可以选择你所需要的并行化级别来加速你的应用。

阅读更多

工厂的生产中,我们需要思考如何让生产线以快速、自动化和可重复的方式从原材料生产出消费品。在软件开发领域,也同样会思考同样的问题:如何以快速、自动化和可重复的方式从源代码生成发布版本。

CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。

缩略词 CI/CD 具有几个不同的含义:

CI/CD 中的 CI 指持续集成(Continuous Integration),CI/CD 中的 CD 指的是持续交付(Continuous Delivery)或持续部署(Continuous Deployment)。

阅读更多

谈谈前端开发中的 MVC、MVP、MVVM 模式

在前端开发中,我们经常会听到 MVCMVPMVVM 这些名词。

  • MVC 代表 Model-View-Controller
  • MVP 代表 Model-View-Presenter
  • MVVM 代表 Model-View-ViewModel

它们都是为了解决图形化界面应用程序(GUIGraphical User Interface)复杂性管理问题而产生的应用架构模式。

网络上也有很多文章来介绍这三种模式,但是有些杂乱,可能有些表述也并不是特别准确。本文将会更加细致地介绍这三种模式。

阅读更多
1 / 12