Promise_基本语法

状态的变化不可逆Promise

它是一个ES6提出一个新语法,用来优化异步代码的写法

promise:承诺。

  • 生活中.它是用来表述 对将来要发生的事情的肯定。 
  • 在ES6中,它是新增的构造器(Array, Object, Promise),用来优化实现异步操作。在没有它之前,javascript中的异步处理,大多是利用回调函数来实现的。典型的几种如下:
  • (1)setTimeout
  • (2)ajax 现在有了promise,就可以对这些异步操作进行改写了

  经典格式:

let p1 = new Promise((resolve, reject) => {
        // resolve和reject是Promise内提供的2个函数, 用于回调返回结果到外面
        resolve(成功结果) // 触发.then()小括号里函数体执行
        reject(失败结果) // 触发.catch()小括号里函数体执行
    })

    p1.then((成功结果变量名) => {

    }).catch((失败结果变量名) => {

    }).finally(()=>{
       // 一定会执行的代码
    })
  • resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”,触发.then的执行
  • reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”,触发.catch的执行

 promise相关语法:


// 语法:
/*
    let Promise对象变量名 = new Promise((resolve, reject) => {
        // resolve和reject是Promise内提供的2个函数, 用于回调返回结果到外面
        resolve(成功结果) // 触发.then()小括号里函数体执行
        reject(失败结果) // 触发.catch()小括号里函数体执行
    })


    Promise对象变量名.then((成功结果变量名) => {

    }).catch((失败结果变量名) => {

    })
*/
let p = new Promise((resolve, reject) => {
    // resolve和reject是Promise内提供的2个函数, 用于回调返回结果到外面
    
    // resolve('成功了')
    reject('失败了')
})

p.then(res => {
    console.log(res)
}).catch(err => {
    console.error(err)
})

图示:


a2e9bbb1de0fd22e71c2634a03519a8a.jpeg

 

Promise_三种状态和值

三种状态

(pending: 准备; resolved(或者fulfilled) 成功; rejected: 失败

准备:new实例化后, Promise对象(pending准备状态)

成功:当Promise内代码执行了resolve, 会导致所在的Promise对象 变成 fulfilled成功状态

失败:当Promise内代码执行了reject, 会导致所在的Promise对象 变成 rejected失败状态

 

 

状态的变化不可逆

promise值:

resolve(值),这个值会自动传递给then

reject(值),这个值会自动传递给catch

示例代码:

// 1. 创建Promise对象并返回此对象在原地, 并立刻执行函数内代码, 交给浏览器去做倒计时了(异步, 不会阻塞主线程代码往下走, 所以继续走2)
let p = new Promise((resolve, reject) => {
    setTimeout(() => {
        // 3. 等2秒后, resolve触发, 影响p对象状态
        resolve('成功结果') // resolve => fulfilled状态 => .then
        // reject('失败结果') // reject => rejected状态 => .catch
    }, 2000)
})

// 2. 立刻给p对象添加.then函数并传入函数体等待被调用接收成功结果(此是.then()小括号里函数体不会执行)
p.then(res => {
    console.log(res); // 2秒后返回'成功结果'
}).catch(err => {
    console.error(err)
})

 Promise对象的状态如何切换?

刚创建会立刻执行new Promise函数内代码, 此时为pending准备状态

当Promise对象内异步代码有结果触发resolve, 会导致Promise对象状态为fulfilled兑现成功状态

当Promise对象内异步代码有结果触发reject, 会导致Promise对象状态为rejected失败状态, 拒绝兑现承诺

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值