iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >处理异步事件的方式有哪些
  • 330
分享到

处理异步事件的方式有哪些

2024-04-02 19:04:59 330人浏览 泡泡鱼
摘要

本篇内容介绍了“处理异步事件的方式有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!同步?异步?首先当然

本篇内容介绍了“处理异步事件的方式有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

同步?异步?

首先当然要先理解一下同步及异步分别是指什么。

这两个名词对于初学者来说总是让人感到困惑的,毕竟从中文字面上的意思很容易让人反过来理解,从信息科学的角度来说,[同步](https://  developer.mozilla.org/en-US/docs/Glossary/Synchronous) 指的是一件一件做事,而 异步  则是很多事情在一起并行的处理。

比如我们去银行办理业务,在窗口前排队就是同步执行,而拿到号码先去做别的事情的就是异步执行;通过 Event Loop 的特性,在 javascript  处里异步事件可说是轻而易举的

那么在 JavaScript 中处理异步事件的方法是什么呢?

回调函数

我们最熟悉最的就是回调函数了。例如网页与用户进行互动时注册的事件监听器,就需要接收一个回调函数;或是其他 WEB api 的各种功能如  setTimeout、xhr,也都能通过传递回调函数在用户要求的时机去触发。先看一个 setTimeout 的例子:

// callback function withCallback() {   console.log('start')   setTimeout(() => {     console.log('callback func')   }, 1000)   console.log('done') }withCallback() // start // done // callback func

在 setTimeout 被执行后,当过了指定的时间间隔之后,回调函数会被放到队列的末端,再等待事件循环处理到它。

注意:也就时因为这种机制,开发者设定给 setTimeout 的时间间隔,并不会精准的等于从执行到触发所经过的时间,使用时要特别注意!

回调函数虽然在开发中十分常见,但也有许多难以避免的问题。例如由于函数需要被传递给其他函数,开发者难以掌控其他函数内的处理逻辑;又因为回调函数仅能配合  try … catch 捕捉错误,当异步错误发生时难以控制;另外还有最著名的“回调地狱”。

处理异步事件的方式有哪些

Promise

幸好在 es6 之后出现了 Promise,拯救了身陷在地狱的开发者们。其基本用法也很简单:

function withPromise() {   return new Promise(resolve => {     console.log('promise func')     resolve()   }) } withPromise()   .then(() => console.log('then 1'))   .then(() => console.log('then 2')) // promise func // then 1 // then 2

之前讨论 Event Loop 时没有提到的是,在html 5 的Web API 标准 中,Event Loop 新增了微任务队列(micro task  queue),而 Promise 正是通过微任务队列来驱动它的;微任务队列的触发时机是在栈被清空时,JavaScript  引擎会先确认微任务队列有没有东西,有的话就优先执行,直到清空后才从队列拿出新任务到栈上。

如上面的例子,当函数回传一个 Promise 时,JavaScript 引擎便会把后传入的函数放到微任务队列中,反复循环,输出了上列的结果。后续的  .then 语法会回传一个新的 Promise,参数函数则接收前一个 Promise.resolve  的结果,凭借这样函数参数传递,让开发者可以管道式的按顺序处理异步事件。

如果在例子中加上 setTimeout 就更能清楚理解微任务与一般任务的差别:

function withPromise() {   return new Promise(resolve => {     console.log('promise func')     resolve()   }) } withPromise()   .then(() => console.log('then 1'))   .then(() => setTimeout(() => console.log('setTimeout'), 0))   .then(() => console.log('then 2')) // promise func // then 1 // then 2 -> 微任务优先执行 // setTimeout

另外,前面所说的回调函数很难处理的异步错误,也可以通过 .catch 语法来捕获。

function withPromise() {   return new Promise(resolve => {     console.log('promise func')     resolve()   }) } withPromise()   .then(() => console.log('then 1'))   .then(() => { throw new Error('error') })   .then(() => console.log('then 2'))   .catch((err) => console.log('catch:', err)) // promise func // then 1 // catch: error //   ...error call stack

async await

从 ES6 Promise  问世之后,异步代码从回呼地狱逐渐变成了优雅的函数式管道处理,但对于不熟悉度的开发者来说,只不过是从回调地狱变成了 Promise 地狱而已。

在 ES8 中规范了新的 async/await,虽然只是 Promise 和 Generator Function组合在一起的语法糖,但通过  async/await 便可以将异步事件用同步语法来处理,就好像是老树开新花一样,写起来的风格与 Promise 完全不同:

function wait(time, fn) {   return new Promise(resolve => {     setTimeout(() => {       console.log('wait:', time)       resolve(fn ? fn() : time)     }, time)   }) } await wait(500, () => console.log('bar')) console.log('foo') // wait: 500 // bar // foo

通过把 setTimeout 包装成 Promise,再用 await 关键字调用,可以看到结果会是同步执行的先出现 bar,再出现  foo,也就是开头提到的将异步事件写成同步处理。

再看一个例子:

async function withAsyncAwait() {   for(let i = 0; i < 5; i++) {     await wait(i*500, () => console.log(i))   } }await withAsyncAwait() // wait: 0 // 0 // wait: 500 // 1 // wait: 1000 // 2 // wait: 1500 // 3 // wait: 2000 // 4

代码中实现了withAsyncAwait 函数,用 for 循环及 await 关键字反复执行 wait  函数;此处执行时,循环每次会按顺序等待不同的秒数再执行下一次循环。

在使用 async/await 时,由于 await 关键字只能在 async function 中执行,使用时务必要记得要同时使用。

另外在用循环处理异步事件时,需要注意在 ES6 之后提供的很多 Array 方法都不支持 async/await 语法,如果这里用 forEach 取代  for,结果会变成同步执行,每隔 0.5 秒就打印出数字。

“处理异步事件的方式有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 处理异步事件的方式有哪些

本文链接: https://www.lsjlt.com/news/84395.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 处理异步事件的方式有哪些
    本篇内容介绍了“处理异步事件的方式有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!同步异步首先当然要先...
    99+
    2022-10-19
  • JavaScript异步处理的方式有哪些
    这篇“JavaScript异步处理的方式有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇...
    99+
    2022-10-19
  • android事件处理方式有哪些
    Android事件处理方式有以下几种:1. 匿名内部类:通过实现回调接口或重写事件监听器的方法来处理事件。2. 内部类:将事件处理逻...
    99+
    2023-08-18
    android
  • javascript事件处理方式有哪些
    这篇“javascript事件处理方式有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2022-10-19
  • springevent事件异步处理方式(发布,监听,异步处理)
    目录spring event 事件异步处理(发布,监听,异步处理)spring事件之异步线程执行Spring 事件发布监听的多种实现异步方法解决方案总结spring event 事件...
    99+
    2023-02-14
    spring event事件异步 event事件发布 event事件监听 event事件异步处理
  • SpringBoot异步处理的方法有哪些
    小编给大家分享一下SpringBoot异步处理的方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!异步请求与同步请求我们先通过一张图来区分一下异步请求和同步...
    99+
    2023-06-15
  • SpringMVC异步处理的方法有哪些
    这篇文章主要介绍SpringMVC异步处理的方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!异步处理 demo如果要启用异步返回,需要开启 @EnableAsync。如下的代码中,使用 DeferredRes...
    99+
    2023-06-06
  • Java异常的处理方式有哪些
    这篇文章主要介绍“Java异常的处理方式有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java异常的处理方式有哪些”文章能帮助大家解决问题。什么是异常?异常在我们写代码是特别常见,因为程序员大...
    99+
    2023-06-30
  • C#处理异常的方式有哪些
    本篇内容主要讲解“C#处理异常的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#处理异常的方式有哪些”吧!关于异常,从我们一开始写代码的时候就开始伴随着我们,只不过那时还没入门,脑子...
    99+
    2023-06-22
  • ADO.NET数据异步处理的方法有哪些
    这篇文章主要介绍“ADO.NET数据异步处理的方法有哪些”,在日常操作中,相信很多人在ADO.NET数据异步处理的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ADO.NET数据异步处理的方法有哪些...
    99+
    2023-06-17
  • javascript中有哪些事件处理方法
    这篇文章主要介绍了javascript中有哪些事件处理方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 jav...
    99+
    2022-10-19
  • RxJava处理业务异常的方式有哪些
    这篇文章主要为大家展示了“RxJava处理业务异常的方式有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“RxJava处理业务异常的方式有哪些”这篇文章吧。关于异常Java的异常可以分为两种:...
    99+
    2023-05-30
    rxjava
  • javascript异步编程有哪些方式
    这篇文章主要为大家展示了“javascript异步编程有哪些方式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascript异步编程有哪些方式”这篇文章吧...
    99+
    2022-10-19
  • java异步编程有哪些方式
    本篇内容介绍了“java异步编程有哪些方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!为什么需要异步?操作系统可以看作是个虚拟机(VM),...
    99+
    2023-06-15
  • Java Swing中事件处理方法有哪些
    这篇文章将为大家详细讲解有关Java Swing中事件处理方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Swing是目前Java中不可缺少的窗口工具组,是用户建立图形化用户界面(GUI)程序的强...
    99+
    2023-06-03
  • web中异步编程的方式有哪些
    本篇内容主要讲解“web中异步编程的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“web中异步编程的方式有哪些”吧!回调函数因为 f1 是一个需要一定...
    99+
    2022-10-19
  • javascript绑定事件的方式有哪些
    这篇文章主要为大家展示了“javascript绑定事件的方式有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascript绑定事件的方式有哪些”这篇文...
    99+
    2022-10-19
  • jquery事件监听的方式有哪些
    本篇内容主要讲解“jquery事件监听的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“jquery事件监听的方式有哪些”吧! ...
    99+
    2022-10-19
  • React事件绑定的方式有哪些
    今天小编给大家分享一下React事件绑定的方式有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、是什么在react应用...
    99+
    2023-06-05
  • vue事件绑定方式有哪些
    在vue中实现事件绑定的方式有:1.通过v-on指令绑定;2.使用methods方法绑定;3.通过v-show指令绑定;在vue中实现事件绑定的方式有以下几种通过v-on指令绑定事件window.onload = fun...
    99+
    2022-10-17
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作