promise理解

Promise异步编程的一种解决方案。 承诺,许诺
promise是什么?
它是ES6原生提供的一个对象,此对象是一个构造函数,可以获取异步操作的消息。

promise就是一个容器,里面保存着未来才会结束的事件,(通常是异步操作的结果)

解决问题:异步编程的解决方案,可以将异步操作以同步操作的流程写出来,不用再层层嵌套。例如ajax,图片加载
promise对象有以下两个特点:

1>对象的状态不受外界影响

Promise代表一种异步操作,有三种状态:pending(进行中) fulfilled(已成功) rejected(已失败)

pending — > fulfilled

pending — > rejected

2>一旦状态改变,就不会再变

开始学习

语法:

Promise.all([promise1,promise2,promise3...]).then((res) => {})  将多个promise包装成多个promise
  
    Promise.prototype.then() 
    
    功能:为实例添加状态改变的回调函数
    
    第一个函数:成功的函数  第二个函数:失败的函数
  
    Promise.prototype.catch()  
    
    功能:发生错误时的回调函数
 
    Promise.prototype.finally() 
    
    功能:不管promise最后的状态如何,都会执行
 
    Promise.prototype.all()   
    
    功能:是把多个promise对象包装成一个promise对象
    
    Promise.reslove()  
    
    功能:把一个现有的对象转成promise对象
    
    Promise.reject()  
    
    功能:把一个现有的对象转成promise对象  它的状态是reject
 
实例
let a = 10;

let promise = new Promise(function(resolve,reject){
    if(a==10){
        resolve(a);
    }else{
        reject(a);
    }
})

//promise.then(success,error)
promise.then(res =>{
    console.log(res)
},error =>{
    console.log(error)
})

promise.catch(err => {
    console.log(err)
})
  • 经常用的形式
new Promise().then(res =>{
    console.log(res)
}).catch(err => {
    console.log(err)
})
Promise.resolve():将现有的东西,转成一个promise对象,resolve状态,成功状态

    等价于:
    
    new promise(resolve => {
        resolve('成功了')
    })

Promise.reject():将现有的东西,转成一个promise对象,reject状态,失败状态

    相当于:
    
    new Promise((resolve,reject) => {
        reject('失败了')
    })
    
Promise.all([p1,p2,p3]):把promise打包,扔到一个数组里面,打包完还是一个promise对象

必须确保所有的promise对象,都是resolve状态,都是成功状态

Promise.race([p1,p2,p3]):只要有成功,就返回


  • 用户登录成功 ----> 获取用户信息
let status = 1;
    
let userLogin = resolve => {
    setTimeout(() => {
        if (status == 1) {
            resolve("登录成功")
        } else {
            reject("登录失败")
        }
    }, 1000)
}

let getUserInfo = (resolve, reject) => {
    setTimeout(() => {
        if (status == 1) {
            resolve("获取信息成功")
        } else {
            reject("失败了")
        }
    }, 1000)
}

new Promise(userLogin).then(res => {
    console.log(res);
    return new Promise(getUserInfo)
}).then(res => {
    console.log(res)
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值