promise

promise是什么?
1、主要用于异步计算
2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
3、可以在对象之间传递和操作promise,帮助我们处理队列
Promise`对象代表一个异步操作,三种状态
pendding : 挂起(等待) 处于未决阶段,表示当前事情还处于挂起状态最终结果没有出现

resolved : 已处理 处于已决阶段,表现是事情已经出现了结果,这个结果是一个成功的结果,可以按照当前结果的正常逻辑顺序继续下去的结果

rejected : 已拒绝 处于已决阶段,表现是事情已经出现了结果,这个结果是一个未成功的结果,当前结果的并不能按照正常逻辑顺序继续下去的结果

注:一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

如何创建的

let p = new Promise(function(resolve, reject){
		
			resolve('要返回的数据可以任何数据例如接口返回数据');
           // reject('要返回的数据可以任何数据例如接口返回数据');
	});
 p.then((data)=>{
        //执行代码逻辑
        console.log(data)//成功
    };
   )
p.catch(err=>{
            console.log("有一个先失败的情况",err)//失败
    })

成功的用then返回,失败的用catch返回
采用链式的then,可以指定一组按照次序调用的回调函数。这个时候前面的一个返回的可能是另外一个Promise对象(也就是说有异步操作)。这样后面的这个Promise就依赖于前面Promise对象的状态。
finally()
ES2018出来的,没有参数,当promise为已决时运行该函数
1.用来测试promise是否已到已决状态
2.对于异步操作完成后不论结果如何的后续操作

function fun(){
          return new Promise((resovle,reject)=>{
                setTimeout(()=>{
                  if(Math.random()<0.3){
                        resovle(true);
                  }else{
                        // throw("11111111");
                        reject();
                  }
                },500)
          })
      }
      let pro=fun();
      pro.finally(()=>{
          console.log("11");
      })

reject返回的(会报错)
在这里插入图片描述
reject返回的(不报错)
在这里插入图片描述
构造函数成员(静态成员)就是能简写
resolve()

const pro = Promise.resolve(1);

等同于

const pro = new Promise((resolve,reject)=>{
                 resolve(1)
         })

reject()

const pro= Promise.reject(2)

等同于

const pro = new Promise((resolve,reject)=>{
                reject(2)
            })

注:如果传递的是一个promise,则直接返回传递的promise对象

Promise.all()

Promise 的 all 方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调。

function cutUp(){
            console.log('挑作业本');
            var p = new Promise(function(resolve, reject){ //做一些异步操作
                setTimeout(function(){
                    console.log('挑好购买作业本');
                    resolve('新的作业本');
                }, 1000);
            });
            return p;
        }

        //买笔
        function boil(){
            console.log('挑笔芯');
            var p = new Promise(function(resolve, reject){ //做一些异步操作
                setTimeout(function(){
                    console.log('挑好购买笔芯');
                    resolve('新的笔芯');
                }, 1000);
            });
            return p;
        }

        Promise.all([cutUp(),boil()]).then(function(results){
            console.log("写作业的工具都买好了");
            console.log(results);
        });

在这里插入图片描述
async

async 用于去修饰函数(函数声明和函数表达式),放在函数的开始位置,被修饰的函数一定返回一个promise对象

async function test(){
            return 123;
            // throw 456;
        }
        const pro = test();
        console.log(pro)

如果有错误

// 如果async中有错误的时候
async function getPromise(){
    if(Math.random() < 0.5){
        return 1;
    }else {
        throw 2;
    }
}

async function test(){
    getPromise().then(data =>{
        const result = data;
        console.log("正常",result)
    },err => {
        console.log("错误",err);
    })
}
test()

在这里插入图片描述
在这里插入图片描述
await 等待

相当于then方法,await必须写在async函数里面

async function test1(){
    return 123;
}
async function test2(){
    const result = await test1();
    console.log(result)
}
test2()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值