ES6 Promise基本使用,串联,其他API(详解)

Promise详解-1:初识Promise 不懂Promise?看这篇教程就够了 阅读详情

Promise的基本使用

const pro = new Promise((resolve, reject)=>{
    // 未决阶段的处理
    // 通过调用resolve函数将Promise推向已决阶段的resolved状态
    // 通过调用reject函数将Promise推向已决阶段的rejected状态
    // resolve和reject均可以传递最多一个参数,表示推向状态的数据
})

pro.then(data=>{
    //这是thenable函数,如果当前的Promise已经是resolved状态,该函数会立即执行
    //如果当前是未决阶段,则会加入到作业队列,等待到达resolved状态后执行
    //data为状态数据
}, err=>{
    //这是catchable函数,如果当前的Promise已经是rejected状态,该函数会立即执行
    //如果当前是未决阶段,则会加入到作业队列,等待到达rejected状态后执行
    //err为状态数据
})

细节

  1. 未决阶段的处理函数是同步的,会立即执行
  2. thenable和catchable函数是异步的,就算是立即执行,也会加入到事件队列中等待执行,并且,加入的队列是微队列
  3. pro.then可以只添加thenable函数,pro.catch可以单独添加catchable函数
  4. 在未决阶段的处理函数中,如果发生未捕获的错误,会将状态推向rejected,并会被catchable捕获
  5. 一旦状态推向了已决阶段,无法再对状态做任何更改
  6. Promise并没有消除回调,只是让回调变得可控

在这里插入图片描述

Promise的串联

当后续的Promise需要用到之前的Promise的处理结果时,需要Promise的串联

Promise对象中,无论是then方法还是catch方法,它们都具有返回值,返回的是一个全新的Promise对象,它的状态满足下面的规则:

  1. 如果当前的Promise是未决的,得到的新的Promise是挂起状态
  2. 如果当前的Promise是已决的,会运行响应的后续处理函数,并将后续处理函数的结果(返回值)作为resolved状态数据,应用到新的Promise中;如果后续处理函数发生错误,则把返回值作为rejected状态数据,应用到新的Promise中。

后续的Promise一定会等到前面的Promise有了后续处理结果后,才会变成已决状态

如果前面的Promise的后续处理,返回的是一个Promise,则返回的新的Promise状态和后续处理返回的Promise状态保持一致。

Promise的其他api

原型成员 (实例成员)

  • then:注册一个后续处理函数,当Promise为resolved状态时运行该函数
  • catch:注册一个后续处理函数,当Promise为rejected状态时运行该函数
  • finally:[ES2018]注册一个后续处理函数(无参),当Promise为已决时运行该函数

构造函数成员 (静态成员)

  • resolve(数据):该方法返回一个resolved状态的Promise,传递的数据作为状态数据

    • 特殊情况:如果传递的数据是Promise,则直接返回传递的Promise对象
  • reject(数据):该方法返回一个rejected状态的Promise,传递的数据作为状态数据

  • all(iterable):这个方法返回一个新的promise对象,该promise对象在iterable参数对象里所有的promise对象都成功的时候才会触发成功,一旦有任何一个iterable里面的promise对象失败则立即触发该promise对象的失败。这个新的promise对象在触发成功状态以后,会把一个包含iterable里所有promise返回值的数组作为成功回调的返回值,顺序跟iterable的顺序保持一致;如果这个新的promise对象触发了失败状态,它会把iterable里第一个触发失败的promise对象的错误信息作为它的失败错误信息。Promise.all方法常被用于处理多个promise对象的状态集合。

  • race(iterable):当iterable参数里的任意一个子promise被成功或失败后,父promise马上也会用子promise的成功返回值或失败详情作为参数调用父promise绑定的相应句柄,并返回该promise对象

async 和 await

async 和 await 是 ES2016 新增两个关键字,它们借鉴了 ES2015 中生成器在实际开发中的应用,目的是简化 Promise api 的使用,并非是替代 Promise。

async

目的是简化在函数的返回值中对Promise的创建

async 用于修饰函数(无论是函数字面量还是函数表达式),放置在函数最开始的位置,被修饰函数的返回结果一定是 Promise 对象。


async function test(){
    console.log(1);
    return 2;
}

//等效于

function test(){
    return new Promise((resolve, reject)=>{
        console.log(1);
        resolve(2);
    })
}

await

await关键字必须出现在async函数中!!!!

await用在某个表达式之前,如果表达式是一个Promise,则得到的是thenable中的状态数据。


async function test1(){
    console.log(1);
    return 2;
}

async function test2(){
    const result = await test1();
    console.log(result);
}

test2();

等效于


function test1(){
    return new Promise((resolve, reject)=>{
        console.log(1);
        resolve(2);
    })
}

function test2(){
    return new Promise((resolve, reject)=>{
        test1().then(data => {
            const result = data;
            console.log(result);
            resolve();
        })
    })
}

test2();

如果await的表达式不是Promise,则会将其使用Promise.resolve包装后按照规则运行

CANOCO5.0实现冗余分析(RDA)最详细步骤 在地理及生态领域会常使用RDA分析,RDA的实现路径也有很多,今天介绍一下CANOCO软件的实现方法。1.不同样点和环境因子之间夹角是锐角 是正相关,是钝角是负相关。2.夹角越大 说明相关性较小,夹角越小,相关性越大。得有不同的物种或者样点数值,再加上环境因子数据。3.箭头越长 相关性越大。时间调整到2010年。 阅读详情

相关推荐

IsaacLab从入门到精通(二) 导入自定义机器人

IsaacLab系列第二讲,导入自定义的机器人及设置

DejaWu33的博客 8466

你不知道的JS(十四):Promise

Promise的可信任性、提供的API和局限性。

weixin_51670675的博客 1024

数学建模 种群竞争模型 学习笔记

模型背景 应用场景 种群竞争模型 例如 s1=0.5,则表示对于供养甲的资源来讲,单位数量的乙的消耗为单位数量的甲的0.5倍,即表示乙对于该资源的占有能力是甲的0.5倍(即竞争力弱) 仿真结果及分析 (1)设置自然增长率 r1=r2=1 (2)改变自然增长率 r1=r2=0.3 (3)修改甲和乙的最大容量 n1=10000, n2=100 (4)修改甲和乙的初始数量 x1=10, x...

Test_tju的博客 2028

ES6——Promise的串联

Promise的串联一、Promise的串联二、问题优化 一、Promise的串联 当后续的Promise需要用到之前的Promise的处理结果时,需要Promise的串联 Promise对象中,无论是then方法还是catch方法,它们都具有返回值,返回的是一个全新的Promise对象,它的状态满足下面的规则: 如果当前的Promise是未决的,得到的新的Promise是挂起状态 如果当前的Promise是已决的,会运行响应的后续处理函数,并将后续处理函数的结果(返回值)作为resolved状态数据,

xun__xing的博客 951

用OpenNI2获取奥比中光Astra Pro及 Astra Pro SM输出的深度图(win,linux arm64 x64平台)

搞了一个奥比中光Astra Pro,想在windows平台,和linux rk3588 上获取深度信息,之前的驱动下载已经不好用了。

babytiger的专栏 1305

SAP-ML章<<<<第二节:物料账报错处理ABAP编程错误:RAISE_EXCEPTION>>>>

#SAP-ML章<<<<第一节:物料账报错处理ABAP编程错误:RAISE_EXCEPTION>>>> 1.物料账报错提示: ABAP编程错误:RAISE_EXCEPTION ABAP程序:SAPLFCML4H_RUN_PRICES应用组件CO-PC-ACT 2. 物料账报错背景: CKMLCP运行结算时 3. 解决方案: 通过DEBUG查看错误的地方 OKTZ:分析原因为:可能打包或者配置传输时弄错 ...

SAP.David.Gao的博客 1858

Promise常用API介绍

1.Promise构造函数: Promise (excutor){} 2.Promise.prototype.then方法:(onResolved, onRejected) =>{} 3.Promise.prototype.catch方法:(onRejected)=>{} 4.Promise.resolve方法: (value) =>{} 5.Promise.reject方法: (reason) =>{} 6.Promise.all方法:(promises)=> {} 7.Promise.race 方法

qq_52788258的博客 3161

服务器取证——服务器基础知识

服务器基础知识

记录并分享学习安全的知识点.. 2482

Promise对象基本API介绍

目录 一、含义: 二、Promise对象的特点: 1、对象的状态不受外界影响。 2、一旦状态改变、就不会再变,任何时候都可以得到这个结果。 3、避免了层层嵌套的回调函数,解决回调地狱的问题。 三、基本用法: 1、Promise对象是一个构造函数,用来生成Promise的实例。 2、Promise实例生成以后,可以用then方法分别指定Resolved状态和Rejected状态的回调函数。 3、在Promise实例中调用resolve()或者reject(),应该在前面加上return.

果车的博客 2055

安全监控:人员行为分析_(2).人员行为分析基础理论

人员行为分析是指利用计算机视觉技术对视频中的人类行为进行实时或离线检测、识别和理解的过程。视频采集:通过摄像头等设备获取视频数据。视频预处理:对视频数据进行噪声过滤、图像增强等处理,以便后续分析。特征提取:从视频中提取出与人员行为相关的特征,如人体姿势、动作轨迹等。行为识别:利用机器学习或深度学习模型对提取的特征进行分类,识别出具体的人员行为。行为理解:对识别出的行为进行进一步分析,理解其背后的意图或状态。在人员行为分析中,常用的公开数据集包括UCF101、HMDB51、ActivityNet等。

zhubeibei168的博客 1345

新手必看!一步步教您如何获取可用的D音Cookie(为什么我复制的D音Cookie无法正常使用?)

新手必看!一步步教您如何获取可用的抖音Cookie(为什么我复制的抖音Cookie无法正常使用,无法下载无水印视频?)

XiaoqiangClub的博客 1491

常用的promise API

Promise构造函数: Promise (excutor) {} excutor函数: 同步执行 (resolve, reject) => {} resolve函数: 内部定义成功时我们调用的函数 value => {} reject函数: 内部定义失败时我们调用的函数 reason => {} 说明: excutor会在Promise内部立即同步回调,异步操作在执行器中执行 Promise.prototype.then方法: (onResolved, onRejected) ..

初郁 4578

【第07例】IPD体系进阶: 6 个技术评审点(TR)

TR技术评审点

产品线负责人 4419

ES6——Promise

promise是异步编程的新的解决方案( ES6 规范),它是一个构造函数。可以实例化对象,封装异步操作,获取成功和失败的结果。优点:支持链式调用,可以解决地狱回调问题,执行的方式更为灵活。promise初体验——抽奖。

Honey的博客 388

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

promise小结

promise事件 首先我们要理解一个概念,在ES6中,Promise发生的整个事件过程   ES6 中将某一可能发生异步操作的事情,分成两个阶段:未决和已决阶段: 比如:某个窗口中的一个点击监听事件,监听是否被点击。 1.未决阶段: 监听元素是否被点击 2.已决阶段: 此时按钮已经被点击    这个事件总是从 未决阶段 发展到 已决阶段 ps:这里把事件逐步推向已决阶段,无论这个事件推向的结果如何(成功返回到一个结果/或者是报错)这都是叫已经推向了已决 ES6 分为三种状态:pending(挂起)、r

weixin_46620888的博客 357

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

异步处理Promise

Promise异步处理事件循环 事件循环 JS运行的环境成为宿主环境(JS可以在多种环境下运行,不止只在浏览器环境下运行) 执行栈:call stack,一个数据结构,用于存放各种函数的执行环境,每一个函数执行前,他的相关信息会加入到执行栈。函数调用前,创建执行环境,然后加入到执行栈,函数调用后,销毁执行环境。 注:JS引擎永远执行的是执行栈的最顶部 异步函数:某些函数不会立即执行,需要等到某个时机才会执行,这样的函数称为异步函数。异步函数的执行时机,会被宿主环境控制 浏览器宿主环境中的五个线程:

m0_46823469的博客 369

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ES6 课程概述④

使用 ES6 的一种语法规则,将一个对象或数组的某个属性提取到某个变量中解构不会对被解构的目标造成任何影响。

qq_41988669的博客 1191

JavaScript核心语法全面梳理:从数据类型到事件循环的实战指南

JavaScript核心语法是前端工程师真正拉开差距的内功基石。从数据类型到函数、闭包、this指向,再到数组高阶方法与对象操作,每一步都决定着你处理复杂业务逻辑的能力。理解Promise与async/await的异步流程控制,掌握事件循环机制,是排查异步坑、优化并发场景的关键。在Vue源码分析、JS逆向、三级联动、复制粘贴等实战场景中,核心语法与原生对象能力的组合无处不在。结合js函数、js数组、js promise等高频搜索点,本文系统梳理核心语法体系,帮你打通从理论到实践的任督二脉。

weixin_29002595的博客 254

es6中Promise的理解以及使用

转载:https://www.zcfy.cc/article/javascript-promises-for-dummies-scotch-1961.html 理解 Promise Promise 简介: "假设你是一个宝宝. 你的妈妈承诺(Promise)你,下个礼拜她会给你一台新手机。" 你不知道,下个礼拜你是否会拿到手机。你的妈妈可以真的给你买一个全新的手机,或者放你鸽子,也有可能如...

qq_35430000的博客 2310

ES6 中的Promise

ES6 的Promise 基本使用 const pro = new Promise((resolve, reject)=>{ // 未决阶段的处理 // 通过调用resolve函数将Promise推向已决阶段的resolved状态 // 通过调用reject函数将Promise推向已决阶段的rejected状态 // resolve和reject均可以传递最多一个参数,表示推向状态的数据 }) pro.then(data=>{ //这是thenable函

lzDevastator的博客 222

最全ES6详解及用法

最全ES6详解及用法变量的定义let、constimportclassJS中的原型原型语言prototype、__proto__、constructor ES6虽然已经用了很久,但是还没系统的过一遍,并且只知用法不知内部实现,此次整理除了系统的过一遍外,进行知识串联,还会了解其内部实现原理。 变量的定义 ES5只用var和function两种声明变量的方式,而ES6有六种:var、function...

麒麟的技术博客 6479

ES6 Promise 全解析:从基础到实战的进阶指南

本文系统介绍了JavaScript中Promise的核心概念和使用方法。首先分析了传统回调函数的缺陷,如"回调地狱"问题,然后详细讲解Promise的三种状态、链式调用特性以及基础创建方式。重点解析了Promise的关键API,包括then/catch/finally方法,以及Promise.all/race/allSettled等静态方法的适用场景。文章还提供了Promise与async/await结合的实战技巧,并强调了错误处理的注意事项。通过本文,读者可以全面掌握Promise在异

. 1189

理解ES6中的Promise

所谓promise,简单说就是一个容器,里面保存着某个未来才会结束的事件的结果,从语法上说,promise是一个对象,从他 可以获取异步操作的消息,promise提供了统一的API,各种异步操作都可以用同样的方法进行处理,2、执行异步操作,如果成功了执行resolve(),promise对象的状态为resolved,如果失败了执行jeject(),promise对象的状态为rejected;3、then()方法被执行,第一个参数为成功的回调函数,第二个参数为失败的回调函数,并且返回一个新的promise。

Dayunyun2019的博客 523

浅谈ES6基础——Promise

IMAGE加载 Callback Hell function loadImg(src,callback,fail) { var img = document.createElement('img'); img.onload = function() { callback(img) } img.onerror = function() { fail(); } i...

aimolia8633的博客 2万+

ES6-Promise用法

JavaScript中的Promise是处理异步操作的重要机制,它通过状态机(Pending/Fulfilled/Rejected)管理异步流程,解决了回调地狱问题。基础用法包括new Promise创建、.then/.catch链式调用,以及Promise.all/Promise.race等静态方法。实际应用场景涵盖异步请求、操作串联等,还能将回调函数转为Promise形式。Promise提供了更清晰的异步代码组织和错误处理方式,是现代JS开发的核心工具。

你是我一生的追求 516

ES6学习笔记——Promise(2)

8.3 Promise的基本使用 const pro = new Promise((resolve, reject)=>{ // 未决阶段的处理 // 通过调用resolve函数将Promise推向已决阶段的resolved状态 // 通过调用reject函数将Promise推向已决阶段的rejected状态 // resolve和reject均可以传递最多一...

Ryx 的博客 332
上一篇: ES6 异步处理的通用模型 学习Promise之前一定要理解的部分
下一篇: HTML5 新增Api ''Fetch Api'' (详细概括)
苟盛
博客等级 码龄7年 13粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值