关于Promise的简介和基本使用

什么是Promise

  • 简单来说,Promise是异步编程的一种解决方案。

为什么会有promise?

先清楚一下什么是异步与同步:

  • 同步:假设你去了一家饭店,找个位置,叫来服务员,这个时候服务员对你说,对不起我是“同步”服务员,我要服务完这张桌子才能招呼你。那桌客人明明已经吃上了,你只是想要个菜单,这么小的动作,服务员却要你等到别人的一个大动作完成之后,才能再来招呼你,这个便是同步的问题:也就是“顺序交付的工作1234,必须按照1234的顺序完成”。
  • 异步:则是将耗时很长的A交付的工作交给系统之后,就去继续做B交付的工作,。等到系统完成了前面的工作之后,再通过回调或者事件,继续做A剩下的工作。
    AB工作的完成顺序,和交付他们的时间顺序无关,所以叫“异步”。

使用

Promise:进行异步请求时使用
Promise是一个内部封装的类,new的时候会执行它的构造函数(1.保存一些状态信息 2.执行我们传入的函数)
在执行传入的回调函数时,又会传进两个参数,resolve和reject,二者本身又是一个函数

  new Promise((resolve,reject)=>{
  //模拟异步请求
            setTimeout(() => {
                //执行成功时调用resolve
                resolve();
                //执行失败时调用reject
                reject();
            }, 3000);
        }).then(()=>{
            //执行resolve时会来到then
            console.log('hello');
        }).catch(()=>{
            //执行失败会来到catch
            console.log('error')
        })

在进行异步请求成功或失败时可以进行参数的传递,相当于在进行网络请求时将得到的数据进行进一步处理

 new Promise((resolve,reject)=>{
            setTimeout(() => {
                //执行成功时调用resolve
                resolve('执行成功');//resolve中传入的参数对应到then中回调函数中的参数
            }, 3000);
        }).then((data)=>{
            //执行resolve时会来到then
            console.log(data);
        })
上一篇:启动mavros节点经常看到两条红色报错 reject position controll的原因就是,那个时候T265的位置数据还没有传给飞控,飞控没有位置数据,当然拒绝切到定点模式。


下一篇:js赋值符号“=”的小例子