Promise .then .catch async await

慕课网前端学习-Promise,then方法,finally方法,async, await,catch,resolve,reject,all,race,allSetteld,回调地狱 前端学习 阅读详情

 使用场景实例:Promise、async/await使用场景_Ahuan222的博客-优快云博客_async await使用场景

promise  

 

Promise 

1.什么是promise

Promise 是异步编程的一种解决方案,其实是一个构造函数,自己身上有all、reject、resolve这几个方法,原型上有then、catch等方法。

promise的构造函数是同步执行

promise.then中的函数是异步执行

Promise类的实例对象是有**状态(state)**的,对应三个值:pending(待定)、fullfilled(成功)、rejected(失败)

(实例的初始状态为pending,一旦由pending状态落定成fulfilled状态或rejected状态,就不可再次改变,该过程是不可逆的)

与之对应,Promise类实例对象有成功的结果(value)和失败的原因(reason),默认值都为undefined,只有状态被改变后(从初始默认状态落定成功或失败的状态)才会为其赋值。

注意:Promsie内部的state、value、reason是私有的,外界是访问不到的

//向里面传入执行器函数,执行器函数默认两个参数对应改变状态的两个函数
let promise=new Promise((resolve,reject)=>{
    
    //...一系列操作...
    
    //改变实例的状态:pedding->fulfilled,成功的结果value为“我是成功的结果”
    resolve("我是成功的结果")
})

console.log(promise)

 

//向里面传入执行器函数,执行器函数默认两个参数对应改变状态的两个函数
let promise=new Promise((resolve,reject)=>{
        
    //...一系列操作...
    
    //改变实例的状态:pedding->rejected,失败的原因reason为“我是失败的原因”
    reject("我是失败的原因")
})

console.log(promise)

请添加图片描述

正如开头说的,在我们实例化一个Promise时会传入一个执行器函数来进行一系列的操作,这个执行器函数接受两个参数:resolve、reject他们都是回调函数,用来落定状态。在这个执行器函数里面就可以根据这一系列的操作的实际情况通过这两个回调来规定该实例对象的状态是fulfilled(成功),还是rejected(失败),并设置成功的结果或失败的原因。
注意:如果在执行器函数内部抛出错误也会是promsie实例的状态落定成rejected


关于resolve回调函数的参数

  • 传入普通的值或对象,Promise实例的状态直接落定成fulfilled(正如上面的示例)

  • 传入一个新的Promise实例,当前的Promise实例的状态由这个新的Promise来决定,转态转移。

let promise = new Promise((resolve, reject) => {

    //...一系列操作...
	//状态转移为新的Promise
    resolve(new Promise((res, rej) => {
        rej('cuole')
    }))
})
console.log(promise)

请添加图片描述

  • 传入一个对象,并且这个对象内部实现了then方法,那么会自动执行这个then方法同时会将resolve和rejected回调传到then方法中,又这个then方法来决定最终的转态
let promise = new Promise((resolve, reject) => {

    //...一系列操作...
    const obj = {
            then() {
                console.log(233)
                return 123
            }
        }
    resolve(obj)
})

请添加图片描述


let promise = new Promise((resolve, reject) => {
    //...一系列操作...
    const obj = {
        	//这里会自动将res和rej回调传递进来
            then(res, rej) {
                console.log(233)
                //最终转态落定成功,成功的结果为233
                res('233')
            }
        }
        //改变实例的状态:pedding->fulfilled,成功的结果value为“我是成功的结果”
    resolve(obj)
})
console.log(promise)

请添加图片描述

 上面的后两种特殊情况也可能交替出现:

let promise = new Promise((resolve, reject) => {
    //...一系列操作...
    const obj = {
            then(res, rej) {
                console.log(233)
                res('467987987416455')
            }
        }
    resolve(obj)
})
let promise2 = new Promise((res, rej) => {
    //这里执行的res参数是一个Promsie实例,并且这个实例里面执行resolve时传入的是一个实现了then方法的对象
    res(promise)
})
console.log(promise2)

请添加图片描述


2. Promise.prototype.then()方法

在原型上的then方法最多接收两个参数,onResolved处理程序和onRejected处理程序,都是可选的。通过这两个参数我们可以拿到实例成功或失败的结果。同时then方法也会返回一个新的Promise实例对象(下面一律称为promise2)。

then方法的第一个参数是resolved状态的回调函数,第二个参数(可选)是rejected状态的回调函数。 

注意:只有Promsie内部的状态落定了,then方法中对应的处理程序才会执行。

//向里面传入执行器函数,执行器函数默认两个参数对应改变状态的两个函数
let promise = new Promise((resolve, reject) => {
    //改变实例的状态:pedding->fulfilled,成功的结果value为“我是成功的结果”
    reject("我是失败的原因")
})
promise.then(undefined, reason => {
    console.log(reason)
})
//打印 “我是失败的原因”
  • 链式调用

上面说到then方法返回一个新的Promise实例,那么就再次可以使用then方法,不断地.then().then(),以此类推:new Promsie((res,rej)=>(res(‘bar’))).then().then().then() … ,这就是then方法的强大之处,可以链式调用
 

3.Promise.prototype.catch()方法

Promise.prototype.catch方法是.then(null, rejection)的别名,用于指定发生错误时的回调函数。

Promise、then()、catch()详解_Mr-programming的博客-优快云博客_promise的then和catch

async函数、await函数

async函数、await函数、promise、then四者的关系_一生注定学霸命的博客-优快云博客_async await then

https://www.jianshu.com/p/b4fd76c61dc9

1. async await函数基础使用

async和await要搭配Promise使用, 它进一步极大的改进了Promise的写法 ,async函数的返回值是Promise对象,可以用then方法指定下一步的操作

2. 特点

  • 函数前面的async关键字,表明该函数内部有异步操作。调用该函数时,会立即返回一个Promise对象。
  • await后面接一个会return new promise的函数并执行它
  • await只能放在async函数里

 案例

function 摇色子(){
    return new Promise((resolve, reject)=>{
        let sino = parseInt(Math.random() * 6 +1)
        setTimeout(()=>{
            resolve(sino)
        },3000)
    })
}
async function test(){
    let n =await 摇色子()
    console.log(n)
}
test();
  • 上面这段代码async中使await 摇色子()先执行
  • 等到三秒后执行完再把得到的结果赋值给左边的n
  • 也就是说test函数需要三秒钟才执行完成
  • 所以test函数是异步的,因此前面必须写async

3.为什么要用await

  • 为了使我们的异步代码,更像同步的代码

二、async函数的返回值

  • async函数其实是Geneator函数的语法糖。
  • then+下一步操作
  1. async函数的返回值是Promise对象可以用then方法指定下一步的操作。
  2. async函数可以看做多个异步操作,包装成一个Promise对象
  3. await命令就是内部then命令的语法糖。
  • then+回调函数
  1. async函数返回一个Promise对象
  2. 可以使用then方法添加回调函数。
  3. 当函数执行的时候,一旦遇到await就会先返回
  4. 等到异步操作完成,再接着执行函数体后面的语句。
  5. async函数内部return语句返回的值,会成为then方法回调函数的参数
async function f(){
return 'hello world';
}
f().then(v=>console.log(v))
// "hello world;"

全球AI算力最强公司分析报告 全球AI算力最强公司分析报告显示,Google凭借自研TPU技术和庞大数据中心网络位居榜首,拥有约100万至150万块等效H100 GPU算力。微软、Meta和亚马逊紧随其后,分别拥有75万、55万和25万块等效H100 GPU。中国企业中,百度、阿里巴巴和腾讯表现突出,华为在国产AI芯片领域领先。技术指标上,NVIDIA H100相比A100性能显著提升,但功耗也大幅增加。未来AI算力需求将持续激增,预计2028年全球市场将超2000亿美元。新兴挑战者如xAI可能改变竞争格局。 阅读详情

相关推荐

TMS-EEG数据预处理:eeglab工具包TESA(一)

b. 自动选择:Tools -> Reject data epochs -> Reject by probability,然后进行Plot -> channel,进行删除。TMS-EEG(经颅磁刺激-脑电图)是一种结合了TMS和EEG记录的技术,这种技术允许研究者在非侵入的情况下探测大脑环路,评估大脑的兴奋性和连通性等皮层特性。对移除脉冲伪迹的数据进行插值:Tools ->TESA -> Interpolate removed data;插值后,画图查看:数据会有数值;

weixin_43604817的博客 1496

Promise、then()、catch()详解

Promise Promise是ES6新增的引用类型,通过new来实例化时需要传入执行器函数(executor)作为参数,这个执行器函数内部可以封装异步操作。 Promise类的实例对象是有**状态(state)**的,对应三个值:pending(待定)、fullfilled(成功)、rejected(失败) (实例的初始状态为pending,一旦由pending状态落定成fulfilled状态或rejected状态,就不可再次改变,该过程是不可逆的) 与之对应,Promise类实例对象有成功的结果(val

qq_53848768的博客 1万+

uniapp map地图实现marker聚合点,并点击marker触发事件

【代码】uniapp map地图实现marker聚合点,并点击marker触发事件。

weixin_44705979的博客 5437

javascript-异步之Promise then和catch

javascript异步之Promise then和catch 这是javascript异步系列文章的第六篇 前面介绍了Promise.all()、Promise.race()、Promise.finally()、resolve()、reject() 今天讨论一下then和catch 我们展开promise的原型链,看看有哪些实例方法 const p1 = new Promise((resolve, reject) => { }) console.log(p1.__proto__); .

cxu123321的博客 1万+

MacBook用户必看:用Homebrew一键搞定frp内网穿透(含阿里云配置模板)

本文为MacBook用户提供基于Homebrew的frp内网穿透实战指南,详细介绍了从环境准备到阿里云服务器配置的全过程。通过Homebrew一键安装frp客户端,结合阿里云配置模板,实现高效稳定的内网穿透,适用于远程开发、IoT设备调试等多种场景。

weixin_28692817的博客 321

Java小白入门200例81之Java接口

作者简介 作者名:编程界明世隐 简介:优快云博客专家,从事软件开发多年,精通Java、JavaScript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢迎您关注,期待与您一起学习、成长、起飞! 引言 很多Java初学者问我,新手明明很用心、很努力学习的Java知识,转头又忘记了,很让人犯愁,小白如何能够快速成长、成为大牛呢? 其实要成为大神的技巧只有一个:“多学多练”,于是明哥就整理了比较典型的练习实例,通过练习能够快速提升编码技巧和熟练度,让你在成为大

编程界明世隐的博客 1359

Promise介绍then,catch用法,基础介绍(二)

Promise.prototype.catch方法是.then(null,rejection)的别名,用于指定发生错误时的回调函数。2.then方法返回的是一个新的Promise,所以then可以无限次调用。2.1catch后面可以加then,如果没有报错则会跳过catch方法。1.是promise状态改变时的回调函数,then有2个回调函数。作用一样,以下是then的写法和catch的写法。回调函数的参数是上一个promise的返回值。Promise的方法:then和catch。2.catch的介绍。

tangxiaobao2016的博客 1460

《一》:LBE,VR 大空间系列——场景环境需求解析

当前,大量 VR 体验活动在室内场地开展。因此,对于场地照明有特定要求:除天花板外,场地的所有表面均需有照明覆盖。这是为了保证玩家无论处于场地的哪个位置,地面与墙面都不会出现明显的影子。场地内不建议安装射灯或高强度的点光源,若已安装此类灯具,需使用柔光板进行遮盖。此外,要避免在阳光下使用 VR 设备台。参考图(请忽略其中Maker标签)

unitygroup的博客 944

聊聊Promise,catch和then的关系,rejected状态如何在then链中”透传“直到被处理

/Promise状态变成Rejected})//这里then只传入了一个回调函数,rejected状态不会执行这个回调,then方法会将当前rejected状态Promise对象返回}).then((res) => {//前面的Promise为rejected状态,此回调不执行},(err) => {//执行//由于这里面没有抛出错误,也没任何返回,故then方法会返回一个Resolved状态的Promise对象。resolve值为undefined。

lingliu0824的博客 1653

Amazon SES 移出沙盒完整指南 & 高通过率模板

AWS SES沙盒模式转正式模式申请指南 申请正式模式需通过AWS审核,常见被拒原因包括邮件用途不清晰、缺少退订机制或发送量不合理。人工申诉需登录AWS Support Center提交服务限额提升请求,填写详细的公司信息、邮件用途及合规措施。 高通过率申诉模板需包含: 公司信息:名称、网址及与AWS的合作情况。 邮件规范:明确类型(交易/营销)、退订链接及退信处理机制。 发送计划:合理预估发送量,确保合规。 关键点:真实信息、用途清晰、退订机制完善、发送量合理。首次被拒可修改后重新提交。

xianyinsuifeng的博客 329

K8s(二十二):k8s集群如何部署一个Spring Boot项目(依赖于MySQL和Redis外部服务)

🔴 K8s(二十二):k8s集群如何部署一个Spring Boot项目(依赖于MySQL和Redis外部服务)

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 2万+

promise中catch的用法

前言 在最近的项目中,用到了es6的promise语法,发现promise.prototype.catch 并不只是单单reject抛出的回调函数,所以今天做一些笔录,防止以后在项目中又碰到这样的问题。 先介绍一下promise.prototype.catch Promise.prototype.catch 方法是 .then(null, rejection) 或是 .then(undefined, rejection)的别名,用于指定发生错误时的回调函数。 如果Promise 对象状态变为reso

笔记 1万+

Python编写的人工智能美颜系统

接下来,我们应用高斯模糊效果来实现美颜效果,并将原始图像与美颜效果图像进行融合。通过使用OpenCV和Dlib库,我们可以轻松地进行面部特征识别和图像处理,实现美颜效果。接下来,我们应用高斯模糊效果来实现美颜效果,并将原始图像与美颜效果图像进行融合。通过使用OpenCV和Dlib库,我们可以轻松地进行面部特征识别和图像处理,实现美颜效果。在函数内部,我们加载了人脸检测器和面部特征预测器,并读取了输入图像。在函数内部,我们加载了人脸检测器和面部特征预测器,并读取了输入图像。安装完成后,我们可以开始编写代码。

DevScript的博客 725

异步操作 Promise,then/catch,async/await

Promise主要处理异步操作,确认异步操作完成再执行后面的语句。 js通常是单线程的,常用的异步操作有: ajax请求 io操作(文件读取) 定时器 异步操作的原理:执行到需要的异步操作,会开始执行异步操作,不等执行完直接开始执行操作后面的语句,等语句执行完全再去看异步操作是否执行完成,完成就返回完成,没有就继续执行异步。 常用的异步请求操作 const promise = ne...

weixin_34205826的博客 2104

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

异步:promise、then、async、await、try、catch及区别

同步和异步 同步和异步是一种消息通知机制 同步阻塞: A调用B,B处理获得结果,才返回给A。A在这个过程中,一直等待B的处理结果,没有拿到结果之前,需要A(调用者)一直 等待和确认调用结果是否返回,拿到结果,然后继续往下执行。 做一件事,没有拿到结果之前,就一直在这等着,一直等到有结果了,再去做下边的事。 ...

kino2046的博客 4680

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

promise,async →await,then→catch,try→catch 使用简介

promise,async →await,then→catch,try→catch 使用简介

weixin_44434938的博客 1681

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Promise的then、catch、finally、async、await

对于Promise一直使用async、await,而对它的then、catch、finally这三个方法都快忘了怎么用了。 then 接收两个方法作为参数,第一个参数是成功的回调,第二个参数是失败的回调。 catch 相当于 then(undefined, onRejected) catch方法拥有一个参数 finally finally 方法用来指定在 promise 结束时,无论结果是 fulfilled 或者是 rejected,都会执行的回调函数 finally 方法的回调函数不接受任何参数

longtengg1的博客 4426

JavaScript的 Promise,then,catch,finally,async,await 笔记250810

JavaScript 异步编程全面指南:Promise 与 async/await 一、Promise 核心概念Promise 是 JavaScript 处理异步操作的基础,它表示一个异步操作的最终完成(或失败)及其结果值。 基本结构 三种状态resolve()reject()PendingFulfilledRejected 二、Promise 链式方法 1. .then() - 处理成功状态 2. .catch() - 处理错误 3. .final

kfepiza的博客 1200

try/catch+async/await与Promise.then对比

简单说,Promise.then不是没好处,但仅适用于无依赖的简单请求;async/await天生比.then更优,配合工具类封装后,异步代码写起来会特别顺畅,完全不用纠结错误拦截和嵌套的问题。异步请求处理核心知识点。

2401_83539958的博客 315

Promise请求(使用then、catch或者async、await)

Promise请求

pmywy的博客 298

async-await和promise.then()的区别和用法

大多数情况,两者都是在方法内部处理业务。如果不关心返回值,直接调用即可。如果需要返回值,他们的返回值都是promise而不是直接返回数据,需要再次处理,可以使用.then或者await,但是await必须在async方法内部使用。await的后面跟的代码相当于.then内部,所以第二个请求如果必须在第一个请求返回时才开始执行,那么可以写在.then方法内部,或者跟在第一个请求的await后面。async支持请求并行,需要多个请求并行时,会更节省时间。下载后如有问题,欢迎在评论区留言交流。

weixin_李浚泽的博客 225

介绍一下js中Promise、async、await的使用

是基于Promise的语法糖,使用它们可以让代码更加整洁且易于维护。

程序员诚哥 1549

JavaScript异步编程: 回调callback , Promise,then,catch,finally , async,await 笔记250810

JavaScript 异步编程全面解析:回调、Promise、async/await 一、异步编程基础 为什么需要异步? 同步 vs 异步 二、回调函数(Callback) 基本模式 回调地狱问题 解决方案 三、Promise 核心机制 创建 Promise Promise 状态机resolve()reject()PendingFulfilledRejected .then() - 处理成功/失败 .catch() - 错误

kfepiza的博客 781

async 与 await 是啥?如何捕获异常?

一、async 和 await async 和 await 主要用于进行异步请求。 异步函数:程序运行起来不会阻塞后面的代码进程。async 是返回一个 promise 对象,await 就是 async 返回的 promise 对象返回的结果。await 需要搭配 async 使用。 function loadImg(src) { const promise = new Promise((resolve, reject) => { img.onload = function ()

qq_36437172的博客 5856

鸿蒙Promise对象,async和await

本文介绍了鸿蒙ArkTS的Promise用法

Strive443的博客 851

promise与 fetch、async/await

包裹,这样传进promise.all的数据都是resolved状态的。catch方法返回的promise实例会被。在Promise里,执行顺序是。

luemeon的博客 1272
上一篇: HTML5+CSS3
下一篇: Event loop微任务宏任务
BUG_devil
博客等级 码龄5年 45粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值