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.8JavaScript语言的Iterable和Iterator接口

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

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

    类是一种“特殊的函数”。 就像函数声明定义方式和函数表达式定义方式一样,类的定义方式也有两种:类声明定义方式和类表达式定义方式。 1.类声明 注意:在同一个作用域,类声明不可以重复定义,否则会报错。 2.类表达式 注意:在同一个作用域,类表达式不可以重复定义,否则会报错。 注意:命名类表达式的右侧依然是类表达式,不是类…

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

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

发表回复

登录后才能评论