JavaScript Promise对象入门

前言

在ES6中为我们提供了Promise对象。
什么是Promise对象?Promise对象对我们之后的代码运行又提供了哪些强大的帮助?
本篇博文会为大家进行入门级的介绍。

概念

Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。
所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。
通俗讲,Promise是一个许诺、承诺,是对未来事情的承诺,承诺不一定能完成,但是无论是否能完成都会有一个结果。

Promise对象特点

1.1 对象的状态不受外界影响。Promise 对象代表一个异步操作,有三种状态:

  • pending: 初始状态,不是成功或失败状态。
  • fulfilled: 意味着操作成功完成。
  • rejected: 意味着操作失败。

1.2 一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise 对象的状态改变,只有两种可能:

*从 Pending 变为 Resolved 和从 Pending 变为 Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。
*即使改变已经发生了,你再对 Promise 对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

Promise对象缺点

介绍到这里,看起来Promise的出现很好的帮助我们解决了头疼的回调地狱的问题,但是相对的Promise也会有一定的缺点:

(1)无法取消Promise,一旦新建它就会立即执行,无法中途取消。和一般的对象不一样,无需调用。

(2)如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。

(3)当处于Pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)

Promise的创建

我们如果创建一个promise对象,可以使用 new 来调用 Promise 的构造器来进行实例化。
下面是创建 promise 的步骤:

let promise = new Promise(function(resolve, reject) {
			// 异步处理
			// 处理结束后、调用resolve 或 reject
	});

Promise 构造函数包含一个参数和一个带有 resolve(解析)和 reject(拒绝)两个参数的回调。在回调中执行一些操作(例如异步),如果一切都正常,则调用 resolve,否则调用 reject。

promise方法

promise 中提供了 then 和 catch 两个方法,分别用来处理 已成功 和 已失败 的状态。

如果 promise 状态为 fulfilled, 则调用 then 方法来处理对应的成功的逻辑
如果 promise 状态为 rejected, 则调用 catch 方法来处理对应的失败的逻辑

then 和 catch 方法的参数也是一个函数,而且这个函数返回的都是一个新的promise对象
then 和 catch 在函数中可以 return 一个值,如果没有 return 默认代表 return undefiend

1. 如果 return 的是一个非Promise 对象

1.3 那么会通过Promise.resolve() 将返回的值转成一个状态为fulfilled 的 Promise对象

2. 如果 return 的是一个 Promise 对象

1.4 则返回一个新的 Promise对象,该Promise对象的状态由返回的Promise对象状态来确定
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值