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

相关推荐

  • 1.5JavaScript语言的变量(Variable)

    1.变量声明 注意:在同一个作用域,相同名称的变量不可以重复声明,否则会报错。 变量在赋值后可以通过重新赋值改变其值。 注意:新的值的类型不一定与老的值的类型相同。 2.变量声明提升(Hoisting) 变量声明不支持提升。 3.变量作用域 变量的作用域是块作用域,即外围离变量最近的代码块。全局变量的作用域是定义它们的…

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

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

  • 3.TypeScript常用语法一览表

    1.JSDoc注释 2.非运算符 非运算符 描述 标识符? 用于函数的形参名、对象类型的属性名后面,表示是可选的(可传递实参,也可不传递实参,当不传递实参的时候,相当于传递了 undefined 值)。 3.类型 3.1常用类型 类型 描述 bigint 大整数类型 number 数值类型 boolean 布尔类型 s…

发表回复

登录后才能评论