返回顶部
首页 > 资讯 > 精选 >JavaScript Promise与async、await有什么作用
  • 817
分享到

JavaScript Promise与async、await有什么作用

2023-07-05 00:07:50 817人浏览 独家记忆
摘要

这篇文章主要介绍“javascript Promise与async、await有什么作用”,在日常操作中,相信很多人在JavaScript Promise与async、await有什么作用问题上存在疑惑,小编查阅了各式资

这篇文章主要介绍“javascript Promise与async、await有什么作用”,在日常操作中,相信很多人在JavaScript Promise与async、await有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript Promise与async、await有什么作用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、promise与async和await有什么用

都是为了解决异步回调产生的。

Promise的字面意思是“承诺”,即承诺会执行。Promise好比容器,里面存放着一些未来才会执行完毕的事件的结果,而这些结果一旦生成是无法改变的。

async和await遵循的是Generator 函数的语法糖,他拥有内置执行器,不需要额外的调用直接会自动执行并输出结果,它返回的是一个Promise对象。

二、Promise的作用

底层代码是怎样的?

promise的精髓是状态的传递,方法的封装者并不需要关心异步方法的执行结果,方法的封装者通过状态传递拿到执行结果书写自己的逻辑,使得封装者与使用者的真正解耦。

这种状态传递有种发布订阅的味道,回调地狱并非书写上的地狱而诟病,promise 的链式调用也会有地狱之感,而回调地狱真正为之诟病的是没有真正解耦。async 是 promise 的语法糖。

在之前没有promise的时候,我们处理多个异步请求回调是一层一层嵌套的,第一个函数的输出是第二个函数的输入,比如:

ajax.get(url, function(id) {    ajax.get({id}, function() {        ajax.get({name}, function() {            ......        })    })})

如果业务逻辑复杂,且基本上我们对于请求回来的数据还得做一系列的处理,这样的代码对于后期的可阅读性和可维护性都十分不友好,那么promise的链式调用就解决了多层异步嵌套回调的问题,且代码可读性和可维护性都会提高。

promise有三种状态pending、fulfilled、reject

new Promise调用的时候需要传入一个executor执行器函数,该函数会立即执行;

executor函数接收两个参数,resolve,reject,分别对应异步请求成功执行和失败执行;

设置默认状态stratus为pending,请求成功状态下的值为value,默认值为undefined,请求失败下的值为reason,默认值为unfined

promise的状态值只能从pending -> fulfilled 或者 pending -> reject,状态一旦确定就不会再改变

promise有一个then方法,接收两个参数onFulfilled、onRejected,分别为异步请求成功的回调和失败的回调。

promise的使用

function getJSON() {  return new Promise((resolve, reject) => {    setTimeout(() => {      let json = Math.random() * 2      if (json > 1) {        resolve(json)      } else {        reject(json)      }    }, 2000)  })}const makeRequest = () =>  getJSON()    .then(data => {      console.log('data==>', data)      return 'done'    })    .catch(err => {      console.log('err==>', err)    })makeRequest()

三、async和await的使用

要理解async函数,首先得来了解一下Generator函数。因为 async和await遵循的是 Generator 函数的语法糖

Generator函数生成器的理解:

es6引入的一个数据类型,相当于一个状态机,内部封装了很多状态,同时返回一个迭代器对象。可以通过这个迭代器遍历相关的值和状态。

Generator的显著特点是可以多次返回,每次的返回值作为迭代器的一部分保存下来,可以被我们显式调用。

  • async函数是使用async关键字声明的函数。 async函数是AsyncFunction构造函数的实例, 并且其中允许使用await关键字。async和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用promise。

  • async函数可能包含0个或者多个await表达式。await表达式会暂停整个async函数的执行进程并出让其控制权,只有当其等待的基于promise的异步操作被兑现或被拒绝之后才会恢复进程。promise的解决值会被当作该await表达式的返回值。使用async / await关键字就可以在异步代码中使用普通的try / catch代码块。

  • await关键字只在async函数内有效。如果你在async函数体之外使用它,就会抛出语法错误 SyntaxError 。

  • async/await的目的为了简化使用基于promise的api时所需的语法。async/await的行为就好像搭配使用了生成器和promise。

  • async函数一定会返回一个promise对象。如果一个async函数的返回值看起来不是promise,那么它将会被隐式地包装在一个promise中。

Async/Await的使用

function getJSON() {  return new Promise((resolve, reject) => {    setTimeout(() => {      let json = Math.random() * 2      if (json > 1) {        resolve(json)      } else {        reject(json)      }    }, 2000)  })}const makeRequest = async () => {  const value = await getJSON()  console.log(value)  return value}makeRequest()

四、promise与async、await的区别

  • Promise 是应用层的解决方案,它有一个规范,不同的语言也可以实现,它只能异步的处理错误,在js 里它本质上是一个对象。

  • async-await 是语言层的解决方案,它可以说是 Promise的补充,可以让用户像编写同步代码一样编写异步代码,通过try-catch 可以同步地处理错误。

  • Promise 更多应用在函数封装中,async用在函数的使用中。

  • Promise链式调用相当于一个新的回调地狱, 也不能统一处理异常。 Promise 本身是同步函数,多个不会等待。

  • async-await用同步的写法使得可读性更强,同时方便 try-catch 捕获异常, async-await 有明确的前后关系,可读性好。

到此,关于“JavaScript Promise与async、await有什么作用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: JavaScript Promise与async、await有什么作用

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

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

猜你喜欢
  • JavaScript Promise与async、await有什么作用
    这篇文章主要介绍“JavaScript Promise与async、await有什么作用”,在日常操作中,相信很多人在JavaScript Promise与async、await有什么作用问题上存在疑惑,小编查阅了各式资...
    99+
    2023-07-05
  • Javascript中promise,async和await的区别是什么
    本文小编为大家详细介绍“Javascript中promise,async和await的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Javascript中promise,async和await的区别是什么”文章能帮助大家解决疑惑...
    99+
    2023-06-29
  • async/await与promise(nodejs中的异步操作问题)
    举例写文章详情页面的时候的一个场景:首先更改文章详情中的 PV,然后读取文章详情,然后根据文章详情中文章 Id 查阅该文章评论和该文章作者信息。获取全部数据之后渲染文章详情页。数据库操作都是异步的,最直接想...
    99+
    2022-06-04
    操作 await async
  • async和await有什么用
    这篇文章将为大家详细讲解有关async和await有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。来看一个简单的场景://假设有4个异步方法要按顺序调用new Pr...
    99+
    2024-04-02
  • JavaScript详解使用Promise处理回调地狱与async await修饰符
    目录Promise回调地狱Promise简介Promise简单使用async和await 修饰符小结Promise Promise能够处理异步程序。 回调地狱 JS中或node中,都...
    99+
    2024-04-02
  • 细数promise与async/await的使用及区别说明
    目录一、callback,Promise,async&await三者的区别二、Promise1.Promise的特点2.Promise的用法3.Promise的运用(请结合j...
    99+
    2024-04-02
  • C#中async和await有什么用
    这篇文章将为大家详细讲解有关C#中async和await有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言本文介绍async/Task。在学习该知识点过程中,一定要按照每一个示例,去写代码、执行、...
    99+
    2023-06-20
  • JavaScriptPromise与async/await作用详细讲解
    目录一、promise与async和await有什么用二、Promise的作用三、async和await的使用四、promise与async、await的区别一、promise与as...
    99+
    2023-01-14
    JS Promise JS async/await
  • es6中await和async有哪些作用
    今天小编给大家分享一下es6中await和async有哪些作用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2024-04-02
  • async await的用法是什么
    async/await 是 JavaScript 中用于处理异步操作的关键字组合。async 关键字用于声明一个函数是异步函数,该函...
    99+
    2023-10-07
    async
  • JS中的async与await怎么使用
    目录一、async 二、await: 三、综合应用 一、async async创建一个异步函数来定义一个代码块,在其中运行异步代码; 怎样变成异步函数呢?以 async 这个关键字...
    99+
    2024-04-02
  • Javascript中async与await的捕捉错误怎么理解
    这篇文章主要介绍“Javascript中async与await的捕捉错误怎么理解”,在日常操作中,相信很多人在Javascript中async与await的捕捉错误怎么理解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-06-29
  • ajax中async的作用有什么
    ajax中async的作用有什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。ajax中async用于设置用异步或同步方式执行脚本;asy...
    99+
    2024-04-02
  • 怎么使用c#异步操作async await状态机
    本篇内容介绍了“怎么使用c#异步操作async await状态机”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!async awai...
    99+
    2023-07-05
  • 避免async await的使用及原理是什么
    这篇文章主要讲解了“避免async await的使用及原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“避免async await的使用及原理是什么”吧!谎言和as...
    99+
    2023-07-02
  • HTML的async属性有什么作用
    HTML的`async`属性用于指定脚本的异步加载方式。当`async`属性被添加到``元素上时,表示脚本将异步加载,不会阻塞页面的...
    99+
    2023-10-11
    HTML
  • java中await与wait有什么区别
    在Java中,`await`和`wait`是两个不同的概念,具有不同的用途和语义。1. `await`:`await`是用于线程间的协作与通信,一般用于多线程编程中的同步操作。它是在`java.util.concurrent`包中的`C...
    99+
    2023-08-11
    java await wait
  • es6中promise是什么及有哪些作用
    这篇文章主要讲解了“es6中promise是什么及有哪些作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“es6中promise是什么及有哪些作用”吧! ...
    99+
    2024-04-02
  • JS循环中正确使用async、await的方法是什么
    JS循环中正确使用async、await的方法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。概览(循环方式 - 常用)formapforEachfilter声明遍历的...
    99+
    2023-06-22
  • js中Promise有什么用
    小编给大家分享一下js中Promise有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!promise可以处于等待被赋值的等待态(pending),可以给出值并转换为解决态(resolved)。一旦promise被一个...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作