整理学习——ES6 Promise对象

本文详细介绍了ES6中的Promise对象,包括其用于处理异步操作的原理和使用方法。内容涉及Promise的构造函数、三种状态(pending, fulfilled, rejected)、相关属性和方法如Promise.all、Promise.race等。此外,还探讨了Promise原型链上的then、catch和finally方法,以及Promise对象的链式调用和复合操作。最后,文章提供了Promise使用的示例和注意事项。" 6280605,1025524,Matlab回调函数详解与应用,"['matlab编程', '回调机制', 'Simulink', '模型操作']
摘要由CSDN通过智能技术生成

简要说明

Promise对象用于表示一个异步操作的最终完成/失败,及其结果值。

new Promise(executor)

executor = function(resolve, reject){…}
executor是一个参数为resolve和reject的函数。该函数由Promise构造函数在执行的时候立即调用executor函数,resolve和reject两个函数作为参数传递给executor。executor函数在Promise构造函数返回所建Promise实例对象前被调用,
executor内部通常会执行一些异步操作,一旦异步操作完成,会调用resolve函数将promise状态改为完成,不然就会因为发生错误而失败。如果一个错误在executor函数中被抛出,promise就被拒绝,同时executor函数的返回值会被忽略。
一个Promise对象是一个代理对象。被代理的值在promise创建的时候是未知的。它允许你为异步操作的成功和失败分别绑定对应的处理方法。这让异步方法像同步方法一样返回值。但不是立即返回最终执行结果,而是一个能代表未来出现的结果的promise对象。
一个promise对象有以下几种状态:

  1. pending:初始状态,既非成功也非失败
  2. fulfilled:操作成功完成。
  3. rejected:操作失败

pending状态的Promise对象可能会变为fulfilled状态并传递一个值给对应的状态处理方法,也可能变为rejected状态并传递失败信息。当其中任一情况出现时,Promise对象的then方法绑定的处理方法就会被调用。
Promise的then方法,包含两个参数:onfulfilled和onrejected,都是Function类型。

  1. 当Promise状态为fulfilled时,调用then的onfulfilled方法;
  2. 当Promise状态为rejected时,调用then的onrejected方法。
    所以在异步操作的完成和绑定处理方法之间不存在竞争。
    因为Promise.prototype.then 和 Promise.prototype.catch方法返回promise对象,所以他们可以被链式调用。
    Promise链式
来自https://mdn.mozillademos.org/files/15911/promises.png

三种状态下的promise

以下是三种不同状态下Promise对象可能的值

  1. Fulfilled。
    • 另一个非promise的值
    • 尽快调用任何已通过的完成的处理操作的准备操作
    • 另一个状态为fulfilled的promise
  2. Rejected。
    • 直接被拒绝
    • 尽快调用任何已通过的失败的处理操作的准备操作
    • 另一个状态为rejected的promise
  3. Pending
    • 即将尽快调用Fulfilled或是Rejected的处理程序
    • 另一个状态为pending的promise

属性

length

值为1,构造器参数的数量

prototype

表示Promise构造器的原型。

方法

Promise.all(iterable)

返回一个新的promise对象。
iterable是一个迭代器对象,比如Array或String。
当可迭代对象中的所有promise状态为成功时,该promise对象才成功。并返回一个包含可迭代对象中所有promise返回值的数组作为成功回调的返回值。这个数组中元素的顺序与可迭代对象中元素的顺序保持一致。一旦可迭代对象中任一promise被拒绝,则这个返回的promise就会被拒绝,并且返回或者抛出第一个触发失败的promise对象的错误信息作为它被拒绝的原因。
通常被用于处理多个promise对象的状态集合。

序号 iterable 返回 备注
1 空的可迭代对象
([] 或 “”)
一个已完成状态的Promise -
2 不包含任何Promise 一个异步完成的Promise Chrome58返回一个已完成状态的Promise
3 其他 处理中的Promise 这个返回的promise之后会在所有的promise都完成变为完成,返回值按参数内的promise顺序排序
or
遇到任一promise失败变为失
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值