Promise

Promise

Promise是一个承诺,它根据任务是否执行成功,执行相应的后续操作,常用于异步操作中。
Promise对象用于表示一个异步操作的最终状态(完成或失败),以及其返回的值。

Promise对象状态

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

Promise构造器

Promise构造器用于返回一个Promise对象

new Promise(function(resolve,reject){
    if(true){
        resolve("abc");
    }else{
        reject("def");
    }
})
  1. 构造器参数
    • 构造器参数是一个函数
    • 构造器参数有两个函数参数:resolvereject
    • 构造器参数在调用构造器函数执行时,且在返回Promise对象之前调用
  2. resolvereject
    • resolvereject都是函数
    • resolvereject是自动传入,具体时机不明
    • resolve被调用时,会将即将创建的Promise对象状态设置为fulfilled(完成),reject被调用时,会将即将创建的promise对象状态设置为rejected(失败)

p.then()

注:p是一个Promise对象

  1. p.then(onFulfilled, onRejected);
    • onFulfilledonRejected都是函数,只不过调用时机不同
    • 若p的状态是fulfilled,会调用onFulfilled方法,若p的状态是rejected,会调用onRejected方法
    • onFulfilled有一个参数,即接受的最终结果,onRejected有一个参数,即拒绝的原因
  2. then()的返回值
    • then()返回值是一个Promise对象
    • 如果then中的回调函数返回一个值,那么then返回的Promise将会成为接受状态,并且将返回的值作为接受状态的回调函数的参数值。
    • 如果then中的回调函数抛出一个错误,那么then返回的Promise将会成为拒绝状态,并将抛出的错误作为拒绝状态的回调函数的参数值。
    • 如果then中的回调函数返回一个已经是接受状态的Promise,那么then返回的Promise也会成为接受状态,并且将那个Promise的接受状态的回调函数的参数值作为该被返回的Promise的接受状态回调函数的参数值。
    • 如果then中的回调函数返回一个已经是拒绝状态的Promise,那么then返回的Promise也会成为拒绝状态,并且将那个Promise的拒绝状态的回调函数的参数值作为该被返回的Promise的拒绝状态回调函数的参数值。
    • 如果then中的回调函数返回一个未定状态(pending)的Promise,那么then返回Promise的状态也是未定的,并且它的终态与那个Promise的终态相同;同时,它变为终态时调用的回调函数参数与那个Promise变为终态时的回调函数的参数是相同的。

例:

// 省略其他代码...

new Promise(function (resolve, reject) {
    $.ajax({
         type : 'post',
         data : formData,
         dataType : 'json',
         url : url,
         success: function (data) {
             if (data.code === 200){
                 resolve(data);
             } else{
                 reject(data);
             }
         }
     });
}).then(createSuccess, createFailed);

/**
 * 创建成功后的处理
 * @param data 创建请求的响应数据
 */
function createSuccess(data) {
    console.log(data);
    // do something...
    layer.msg('创建成功!');
}

/**
 * 创建失败后的处理
 * @param data 创建请求的响应数据
 */
function createFailed(data) {
    if (data.code === 400){
        layer.msg(data.message);
        return ;
    }
    if (data.code != 200) {
        layer.msg('创建失败,服务器内部错误!');
        return ;
    }
}

使用Promise

原生的Promise不兼容低版本的IE,所以实际使用中建议使用第三方Promise库,如Bluebird

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值