2.10JavaScript引用类型之期约(Promise)

Promise 对象用来表示异步操作的结果。

1.Thenable接口

方法描述
then(onFulfilled, onRejected)接收两个函数作为参数:一个用于处理承诺(promise)兑现时(fulfilled),一个用于处理承诺(promise)拒绝时(rejected)。

2.Promise类

Promise 类实现了 Thenable 接口。

静态方法描述
Promise.resolve(value)相当于 new Promise((resolveFunc) => resolveFunc(value)) 的简写。
Promise.reject(reason)相当于 new Promise((undefined, rejectFunc) => rejectFunc(reason)) 的简写。
Promise.all(iterable)将多个 Promise 对象组合成一个新的 Promise 对象。
Promise.any(iterable)将多个 Promise 对象组合成一个新的 Promise 对象。
Promise.allSettled(iterable)将多个 Promise 对象组合成一个新的 Promise 对象。
Promise.race(iterable)将多个 Promise 对象组合成一个新的 Promise 对象。
实例方法描述
then(onFulfilled)
then(onFulfilled, onRejected)
用于给 Promise 对象添加处理程序。如果想只提供 onRejected 拒绝处理程序,则需要在 onFulfilled 参数的位置上传入 undefined 值。
catch(onRejected)用于给 Promise 对象添加 onRejected 拒绝处理程序,相当于 then(undefined, onRejected)
finally(onFinally)用于给 Promise 对象添加 onFinally 处理程序,这个处理程序无论 Promise 对象最终落定为兑付或拒绝状态时都会执行。

3.创建Promise对象

创建 Promise 对象时,Promise()构造函数接受一个执行器(executor)函数作为参数。

const p = new Promise(executor);

执行器(executor)函数的签名如下:

//只有resolveFunc函数
(resolveFunc) => { }

//有resolveFunc函数和rejectFunc函数
(resolveFunc, rejectFunc) => { }

//只有rejectFunc函数
(undefined, rejectFunc) => { }

resolveFuncrejectFunc也是函数。

resolveFunc(value)
rejectFunc(reason)

4.Promise对象状态

待定(pending)Promise 对象的初始状态。在待定状态下,Promise 对象可以落定(settled)为代表成功的兑现(fulfilled)状态 或者 代表失败的拒绝(rejected)状态。

Promise 对象的状态不一定非要脱离待定状态从而落定为兑现或拒绝状态。Promise 对象的状态如果一旦落定为兑现或拒绝状态,Promise 对象的状态就不再改变,不可从兑现或拒绝状态逆转为待定状态。

状态描述
pending(待定)表示尚未开始或正在执行中
fulfilled(兑现),又称为resolved(解决)表示已经成功完成
rejected(拒绝)表示没有成功完成
let p = new Promise(() => {});
setTimeout(console.log, 0, p);

//输出
Promise { <state>: "pending" }
let p = new Promise((resolveFunc) => resolveFunc(6));
setTimeout(console.log, 0, p);

//输出
Promise { <state>: "fulfilled", <value>: 6 }
let p = new Promise((undefined, rejectFunc) => rejectFunc(6));
setTimeout(console.log, 0, p);

//输出
Promise { <state>: "rejected", <reason>: 6 }

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/javascript/javascriptlang/21652.html

(0)
huoxiaoqiang的头像huoxiaoqiang
上一篇 2020年9月9日
下一篇 2020年9月11日

相关推荐

  • 1.7JavaScript语言的函数(Function)

    1.Function()函数方式 Function() 函数方式创建的函数定义存在安全性和性能问题,所以不推荐使用,不过此种创建函数定义的方式很好地诠释了函数声明、函数表达式、箭头函数表达式是 Function 类型的实例这个概念。 2.函数声明 注意:在同一个作用域,相同名称的函数可以重复声明,但后定义的会覆盖先定义…

  • 2.6JavaScript引用类型之映射(Map)

    1.映射声明 与对象只能使用字符串、数字或符号作为键不同,映射可以使用任何 JavaScript 数据类型作为键。与对象一样,映射的值可以是任何数据类型。 2.访问映射 3.获取映射长度

  • 1.4JavaScript语言的类型(Type)

    JavaScript 语言有两种类型:原始类型(Primitive Type) 和 引用类型(Reference Type)。 原始类型包括:大整数类型(不可变的)、数值类型(不可变的)、布尔类型(不可变的)、字符串类型(不可变的)、符号类型(不可变的)、Undefined类型(不可变的)、Null类型(不可变的)。 …

发表回复

登录后才能评论