通俗的来讲讲ES6的Promise吧

很明显从语法上看,Promise就是个构造函数,构造函数咋用的我们就咋用。

不同的是Promise这个构造函数是人家事先已经定义好的构造函数。另外定义Promise有状态值,分别是pending(进行中)、fulfilled(已成功)和rejected(已失败)。给状态那么肯定是有用的,后面学废使用后就知道设定这个状态的意义了~~

既然是人家规定好的,我们想去使用它,有些用法(写法)我们还是得按它规定的来(其他的地方还是可以自由发挥的):

在使用Promise构造函数创建实例时,首先Promise构造函数的参数需要写一个函数,你写的这个函数,参数被js引擎也提供了,是人家已经定义好的两个函数resolve和reject,除了前面说的函数参数要写resolve和reject,函数内的代码也还需要写个异步操作,等到异步操作的结果为成功时,就适合调用该函数的参数函数resolve,这样就能将Promise的状态更改为已成功了。如果结果为失败时,就适合需要调用该函数的参数函数reject就能将Promise的状态更改为已失败了。

上面这样描述,可能还不够直观,具体可以看栗子:

// Promise构造函数接受一个函数作为参数,该函数的两个参数resolve和reject也是函数,这里注意参数resolve函数和reject函数是由 JavaScript 引擎提供的,不用自己部署填写
const promise = new Promise(function(resolve, reject) {
  // ... some code

  if (/* 异步操作成功 */){
    /* 
    * 在异步操作成功了,这里就适合 执行resolve函数
    * 那异步操作结果为成功时,执行resolve函数就将Promise的状态由pengding改为fulfilled了
    * 另外异步操作成功返回的successResult,可以放在resolve函数的参数里,这样实例的then方法的参数能拿到进行使用
    */
    resolve(successResult);
  } else { 
    /* 
    * 反之当异步操作的结果如果没有成功,这里就适合 执行reject函数
    * 那异步操作结果为失败,执行reject函数就能将Promise的状态由pengding改为rejected了
    * 另外异步操作失败返回的errorResult可以放在reject函数的参数里,这样实例的then方法的参数也能拿到进行使用
    */
    reject(errorResult);
  }
});

所以这个状态咋更改的呢,其实就是靠Promise的参数函数里异步操作结果,如果成功,执行参数函数的自带的参数函数resolve就能把Promise的状态改为已成功。失败就执行参数函数的自带的参数函数reject就能改为已失败。

一旦状态改变就不能再回到原有状态pending了哈,不然也不会给状态命名已成功或者已失败~

先抛开这个知识点,我们想下一般情况我们进行异步操作是不是为了干点啥,不然我们白费功夫去异步操作下干啥,比如常用的异步操作:请求ajax,我们是不是通常是为了拿到请求返回的数据去展示或者处理。而想展示或者处理我们通常写在回调函数里,等到异步操作有了结果,就会执行这些回调函数实现我们的目的

那在这里,异步操作执行成功或者失败后的回调函数写在哪呢

所以这里实例promise的then方法就派上用场了,用then方法分别指定Promise对象在变成resolved(已成功)状态和rejected(已失败)状态的下回调函数。也就是说Promise对象状态一变,就开始执行实例里定义的回调函数了(如果还不清楚Promise状态如何变化的,往上翻一翻再去看下理解下)


promise.then(function(value) {
  // success 代码呢写些异步操作成功后,你想做的事,value就是异步操作成功返回的值,也就是执行resolve函数时的参数值,在这能拿到
}, function(error) {
  // failure 代码呢写些异步操作失败后,你想做的事,同样error是异步操作失败返回的值,是执行reject函数时的参数值,在这也能拿到
});

以上就是我觉得学Promise必须要掌握的一些东西~

后面可能会更新一些更详细的内容d

参考:ES6 入门教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值