JavaScript - ES6之Promise(then方法详解)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

Promise的出现

Promise是异步操作的一种解决方案,有时候我们使用回调函数异步操作时会层层嵌套,不利于我们修改需求。Promise一般用来解决层层嵌套的回调函数(回调地狱 callback hell)的问题。

Promise的基本用法

第一步:实例化Promise构造函数

const p = new Promise((resolve,reject)=>{}) //Promise解决的不是回调函数,而是回调地狱.

resolve和reject是函数,调用它们可以改变Promise的状态。

promise的回调函数在实例化时就会执行。在回调函数中调用resolve或reject来改变promise的状态

第二步:Promise的三个状态

pending:初始态,未完成或等待;

执行resolve()后变成fulfilled(别名resolved):已成功

执行reject()变成rejected状态:已失败

注意:Promise的状态一旦变化,就不会再改变了(只能变第一次)

第三:Promise的then方法

then方法中有两个回调函数作为参数,如果Promise的状态为fulfilled则执行第一个回调函数;如果状态为rejected则执行第二个回调函数
   例: p.then(()=>{},()=>{})

调用resolve改变状态时,传递的参数会作为then方法的第一个回调函数的参数;调用reject改变状态时,传递的参数会作为then方法的第二个回调函数的参数
    一般reject(new Error('reason'))

then方法什么时候执行:
    当Promise的状态由pending->fulfilled的时候执行第一个回调函数;当Promise的状态由pending->rejected的时候执行第二个回调函数;

then方法执行后的返回值是一个新的Promise对象:
  

<script>

//查看p.then()的返回值

const p = new Promise((resolve,reject) =>{
    resolve();
})  //Promise的状态由pending变为filfilled

const p2 = p.then(
    () => {},  //执行第一个回调函数
    () => {}
).then().then() //返回的是一个Promise对象,也有then方法

console.log(p2);  //Promise
console.log(p2 == p);  //false

</script>

then方法返回的Promise对象的状态改变:看调用这个then方法的状态,默认状态是fulfilled,如果想要rejected状态则需手动修改:

<script>

const p = new Promise((resolve,reject) =>{
    console.log("我调用了reslove,所以我是filfilled状态")
    resolve();
})  //Promise的状态由pending变为filfilled

//默认情况下,Promise调用then方法生成的Promise的状态:
const p2 = p.then(
    (data) =>{
        console.log("调用我的Promise没有改变我的状态,所以我也是默认状态")
        console.log(data); //  Undefined
        return(111);
     },
     () => {}
).then(
    (data) => {
        console.log("调用我的Promise没有改变我的状态,所以我也是默认状态");
        console.log(data); //  111
      return new Promise((resolve,reject)=>{
        //   使用默认状态
            resolve(123);//默认调用resolve,状态为filfilled
        })
    },  
    () => {}
).then(
    (data) => {
        console.log("调用我的promise的调用等同于默认状态,所以我是默认状态,但我调用then生成的Promise不使用默认状态");
        console.log(data);//  123
        //调用then生成的Promise不使用默认的状态,则需自己写完整调用过程
        return new Promise((resolve,reject) =>{
            reject(new Error('reason'))
        })
    },
    () => {}

).then(
    () => {},
    (data)=>{
        console.log("我是非默认状态");
        console.log(data); // Error
    }
)

</script>

ES6 Promisethen方法,Set集合实例,class类各个实现和继承(1) 开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】就答题情况而言,第一问100%都可以回答正确,第二问大概只有50%正确率,第三问能回答正确的就不多了,第四问再正确就非常非常少了。其实此题并没有太多刁钻匪夷所思的用法,都是一些可能会遇到的场景,而大多数人但凡有1年到2年的工作经验都应该完全正确才对。只能说有一些人太急躁太轻视了,希望大家通过此文了解js一些特性。小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。 阅读详情

相关推荐

在 ABAP CDS Query 里动态启用层级,别把层级名写死在查询里

文章摘要(149字): SAP S/4HANA Embedded Analytics中,层级需求常被低估——同一维度(如利润中心)需支持多套管理口径的动态层级切换。传统硬编码hierarchy的方式会导致查询冗余,而通过CDS参数化设计(如hierarchyBinding: [{ type: #PARAMETER, value: 'p_namehier' }])可将层级名称设为变量,用户运行时灵活选择。对于非必选场景,结合@AnalyticsDetails.variable将参数设为optional(man

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3083

promise中的.then方法【待完善】

Promise 是抽象的异步处理对象 构造方法Promise 有三个状态:  上面我们提到 Promise 构造函数接受一个函数作为参数,该函数的两个参数分别是 和 .   resolve函数的作用是,将 Promise 对象的状态从 未处理 变成 处理成功 (unresolved => resolved), 在异步操作成功时调用,并将异步操作的结果作为参数传递出去。   reject函数的作用是,将 Promise 对象的状态从 未处理 变成 处理失败 (unresolved => rejected

大小曲奇的博客 1万+

浅析Promisethen方法

1.关于then then方法的作用是为Promise对象添加状态改变时的回调函数。 2.then的返回值 then()方法的返回值也是一个promise对象,所以它支持链式写法。但是要注意的是它的返回值是一个新的promise对象,与调用then方法的并不是同一个对象。 那么既然 p2也是一个promise对象,那么,p2的状态(promiseStatus)和值(promiseValue)又由什么决定呢?我们先上结论,随后分别逐一验证。 3.p2的状态和值的确定规则 (1)当p1的状态是p

weixin_57396733的博客 6972

jsthen()的用法

2019.4.13 then()方法是异步执行。 意思是:就是当.then()前的方法执行完后再执行then()内部的程序,这样就避免了,数据没获取到等的问题。 语法:promise.then(onCompleted, onRejected); 参数 promise必需。Promise 对象。 onCompleted必需。承诺成功完成时要运行的履行处理程序函数。 onRejected可选。承诺被拒绝时要运行的错误处理程序函数 举例 navigator.mediaDevices.ge.

dxyzhbb的博客 2万+

JavaScript ES6ES10语法 回调地狱与异步操作 Promise then

[toc](JavaScript ES6ES10语法 回调地狱与异步操作 Promise then)resolve reject catch all race。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1006

ES6JavaScriptPromise_API(resolve,reject,then,catch等方法

说明: executor 会在 ,内部封装的异步操作在执行器中执行 在控制台会先打印出111,再打印出222,如下图:说明: 指定用于得到成功 value 的成功回调和用于得到失败 reason 的失败回调返回一个新的 promise 对象说明: then()的语法糖, 相当于: then(undefined, onRejected)说明: 返回一个 💗Promise.reject 方法 reason: 失败的原因 说明: 返回一个 无论传入的参数是什么,返回的结果都是失败的promise对象,打印.

xuxuii的博客 1854

JS - 17 - 手写Promise

视频:https://www.bilibili.com/video/av84485368?t=232&p=18&spm_id_from=333.334.b_62696c692d6865616465722d6d.22 手写PROMISE核心代码,提升JAVASCRIPT编程能力,加深JS异步任务理解,ES6必学知识 代码写在 HD.js 里 HD.js class HD { st...

LawssssCat的博客 445

Javascript ES6 理解Promisethen()

let func = function() { return new Promise((resolve, reject) => { resolve('Promise成功后return的值'); }); }; let cb = function() { return '函数return的值'; } func().then(function() { return cb(); }).then(resp => { //resp = 上一个then的返回值 console.log(1,r

苦涩精灵的博客 614

ES6模块化与异步编程(Promise,async、await,EventLoop,宏任务和微任务)

ES6模块化与异步编程(Promise,async、await,EventLoop,宏任务和微任务)

切图仔 2045

[javascript高手之路] es6系列教程 - promise常见用法详解(resolve,reject,catch,then,all,race)

关于promise我在之前的文章已经应用过好几次,如[js高手之路]Node.js+jade+express+mongodb+mongoose+promise实现todolist,本文就来讲解下promise的常见用法. 为什么会有promise,他的作用是什么? promise主要是为了解决js中多个异步回调难以维护和控制的问题. 什么是promise? 从图中,我们可以看出,Pro

ghostwu-js高手之路 1024

ES6模块化的学习

文章目录一、ES6模块化1. node.js中的模块化2. ES6模块化规范2.1 ES6模块化规范中的定义2.2 在node.js中使用ES6模块化2.3 ES6模块化的基本语法2.3.1 默认导出与导入2.3.2 按需导出与按需导入2.3.3 直接导入并执行二、 Promise1. 回调地狱2. Promise2.1 Promise的理解2.2 then-fs异步读取文件2.3 Promise.all()方法2.4 Promise.race()方法三、 async/await四、 EventLoop1.

ailsa_csdn的博客 712

ES6模块化

ES6模块化规范中的定义 每个js都是一个独立的模块 导入其他模块成员使用Import关键字 向外共享模块成员使用export关键字 node -v 查看版本号 npm init -y 快速生成packge.json packge.json中添加 type =module 即可体验es6语法 { "type": "module", "name": "es6", "version": "1.0.0", "description": "", "main": "index.j...

你的益达啊 512

JSPromise学习【上篇】

自学es6,一步步记录学习成果。

qq_41340330的博客 1131

ES6复习笔记】Promise对象详解(12)

PromiseJavaScript 中处理异步操作的一种机制,它可以让异步操作更加容易管理和控制。Promise 对象代表一个异步操作的最终完成或失败,并提供了一种方式来处理操作的结果。Promise 对象有三种状态:Promise 的基本语法如下: 3.Promisethen方法 4. Promise的catch方法 函数只有一个回调函数,意味着如果Promise对象状态为失败就会调用catch()方法并且调用回调函数 5. Promise 的实践 5.1 读取单个文件 使用 Promise

胡西风的博客 734

获取异步请求返回promise中的数据

为什么 我们都知道,在项目中,由于JS 的单线程机制(可了解微任务、宏任务)异步请求的数据是无法立即使用的,ES6提供的promise机制可以很好的解决这个问题。那么如何使用promise来获取异步请求返回的数据呢,以下。 1. 单个promise对象——.then获取 function f(){ return new Promise((resolve, reject) => { //调用resolve函数返回数据data resolve(data); }); } p = foo(

Amber8080的博客 1万+

ES6模块化与异步编程高级用法

ES6模块化规范是浏览器端与服务器端通用的模块化开发规范。ES6模块化规范中定义每个js文件都是一个独立的模块导入其它模块成员使用import关键字向外共享模块成员使用export关键字async/await是ES8(ECMAScript2017)引入的新语法,用来简化Promise异步操作。在async/await出现之前,开发者只能通过链式.then()的方式处理Promise异步操作。示例代码如下.then链式调用的优点解决了回调地狱的问题。...

Lotus_fragrance的博客 326

ES6-Promise入门学习

ES6-Promise入门,对学习vue-resource或者axios有帮助

Java开发 354

ES6中的Promis的使用方法

什么是PromisePromise是由 CommonJSPromises/A 规范中提出来的,是js一部编程的重要概念,是比较就行的javascript一部变成解决方案之一。 常见的异步编程解决方案 回调函数 事件监听 发布/订阅 Promise对象 在这里以上的及以上的集中解决方案就不一一说了,我们就拿一部函数简单说一下吧 1.在JQuery中我们通过异步请求拿到后台数据,都是以回...

qq_35530330的博客 567

Es6 和 同步异步任务

1. Es6 模块化 1.1 ES6 模块化规范中定义: 每个 js 文件都是一个独立的模块 导入其它模块成员使用 import 关键字 向外共享模块成员使用 export 关键字 1.2 在 node.js 中体验 ES6 模块化 node.js 中默认仅支持 CommonJS 模块化规范,若想基于 node.js 体验与学习 ES6 的模块化语法,可以进行如下配置: 确保安装了 v14.15.1 或更高版本的 node.js node -v 命令可查看

JFAHS67的博客 753
下一篇: js之Promise 解决 回调地狱(callback hell)详解
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值