Promise基本使用

promise是啥就不做介绍了, 直接入正题

基本使用

var p1 = new Promise((resolve, reject) => {
    //异步操作, 异步完成调用resolve改变状态, 失败调用reject改变promise的状态
    setTimeout(()=>{
        resolve(1)
    }, 0)   
})//返回一个promise对象
p1.then(function(){ //promise对象的状态为resolve时的处理函数

}).catch(function(){ //promise对象的状态为reject时的处理函数

})

以上就是基本的使用方法。

几个方法的简单说明

Promise()

构造函数,用于创建一个promise对象, 初始状态为pending, 内部调用传入的函数,执行异步操作, 并在完成或失败时调用resolve和reject改变状态,

resolve方法

改变promise状态为resolve的函数, 当异步操作成功时调用, 传入的参数被包装为一个新的promise对象, 状态为resolved, 如果传入的参数本身就是一个promise对象, 则返回的promise对象直接使用该promise对象的状态和值

reject方法

改变promise对象状态为reject的函数, 与resolve类似。 在ES6中, 不过如果reject被调用了, 没有相关的处理函数, 将会报错

Promise.prototype.then方法

用于注册状态改变时的处理程序, 可以传入两个参数, 第一个为resolve状态时的处理函数, 第二个为reject状态时的处理函数。

从链式调用的角度来看:

promise.then(()=>{
    //做些事情
}).then(()=>{
    //做些事情
}).catch(()=>{})

返回值是一个新的promise对象
调用then方法时, 如果promise对象的状态已经为resolved, 则调用then方法中的第一个参数; 如果promise对象的状态已经为rejected, 则调用then方法中的第二个参数 。其实then的返回值, 与传入的参数的返回结果有一定关系。

Promise.prototype.catch 方法

相当于then方法的另一种写法, 用于处理reject状态时的处理函数, 在es6中, 如果reject方法被调用却没有相应的处理函数处理rejected状态, 将会报错。

Promise的其他函数

在es6中, promise还有两个附加函数用于处理以后一个回调异常的情况。
1. promise.prototype.done //用于处理最后一个回调有错的情况。
2. promise.prototype.finally //done方法有错才会执行, finally不管有错没错都会执行

用于同时处理多个异步的方法:
1. Promise.all([]) //参数为promise对象组成的数组。返回一个新的promise对象。每个异步都成功时,该promise对象的状态变为resolved, 只要有一个异步失败, 都将变为rejected.。 并将该错误信息传出
2. Promise.race([]) //参数同上。 返回一个新的promise对象。 当有一个异步成功或失败, 状态就变为resolved或rejected, 并将结果传出

Promise的正确使用方式

/ 错误的写法
promise1.then(function(value) {
  promise1.then(function(value) {
    promise1.then(function(value) {

    })
  })
})

promise.then(()=>{
    //做些事情
}).then(()=>{
    //做些事情
}).catch(()=>{
    //做些事情
}).then(()=>{
    //做些事情
}).catch(()=>{
    //做些事情
})

promise应该采用链式方法调用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值