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日 22:52
下一篇 2020年9月11日 11:30

相关推荐

  • 2.3JavaScript原始类型之符号(Symbol)

    一个符号实例用于表示一个唯一的标识符。 1.创建符号实例 注意:符号实例不支持字面量创建方式。 注意:符号实例不支持 new Symbol() 创建方式。 Symbol() 函数可选地接受一个字符串实参,字符串实参仅仅作为对符号实例的描述,将来可以通过这个字符串实参来调试代码,不影响任何事情。 Symbol() 函数的…

  • 2.7JavaScript引用类型之集合(Set)

    1.集合声明 集合的值可以是任何数据类型。 2.访问集合 3.获取集合长度

  • 1.6JavaScript语言的常量(Constant)

    1.常量声明 注意:在同一个作用域,相同名称的常量不可以重复声明,否则会报错。 常量在赋值后不可以通过重新赋值改变其值,即使新的值与老的值相同也不可以。 如果一个常量存储的是对象的引用,意味着此常量总是引用同一个对象,但是,改变对象的属性的值是可以的。 注意:属性新的值的类型不一定与属性老的值的类型相同。 2.常量声明…

发表回复

登录后才能评论