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日

相关推荐

  • 2.8JavaScript语言的Iterable和Iterator接口

    1.Iterable接口 方法 返回值 @@iterator 返回一个实现了Iterator接口的对象。 2.Iterator接口 方法 是否必须实现 返回值 next() 必须 返回一个实现了IteratorResult接口的对象。 return() 非必须 返回一个实现了IteratorResult接口的对象。 t…

  • 2.4JavaScript引用类型之类(Class)

    1.类声明 类是一种“特殊的函数”,就像函数声明定义方式和函数表达式定义方式一样,类的定义方式也有两种:类声明定义方式和类表达式定义方式。 2.继承 一个子类只可以直接继承自一个父类,不可以直接继承自多个父类。 子类会直接继承父类中可继承的成员,间接继承祖父类中可继承的成员,以此类推,直至没有可继承的成员。 继承支持静…

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

    一个符号实例用于表示一个唯一的标识符。 1.创建符号实例 可以将 Symbol() 函数用作构造函数创建符号实例。 注意:符号实例没有字面量创建方式。 注意:Symbol() 函数不可以用作类构造函数与 new 关键字一起使用创建符号实例。 Symbol() 构造函数可选地接受一个字符串实参,字符串实参仅仅作为对符号实…

发表回复

登录后才能评论