Promise及其应用

Promise 是异步编程的一种解决方案,比传统的解决方案—回调函数和事件—更合理和更强大。

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

语法上,Promise 是一个对象,从它可以获取异步操作的消息。

Promise 提Promise对象的特点供统一的 API,各种异步操作都可以用同样的方法进行处理。

Promise对象的特点

1.Promise有三种状态:pending、fullfilled、rejected。分别表示进行中、已完成和已失败。

2.Promise的状态有pending改变为fullfilled或rejected后就不会再改变。

3.Promise中传递一个执行器函数,在执行器函数中调用resolve和reject方法可以讲Promise的状态改为fullfilled或rejected。并且可以通过then方法来处理成功的数据,通过catch来抛出错误的原因。

异步编程与Promise的关系

由于代码址行顺序是由执行栈空->微任务队列->宏任务,如果将异步任务和处理异步获取到的数据的代码放在同一代码块内,会导致数据还未拿到就开始请求。使用Promise就可以避免这个问题。我们通常讲异步任务放在Promise的执行器函数中,并通过数据请求情况调用Promise的resolve和reject函数来改变Promise的状态。再通过then方法处理请求成功的数据,通过catch抛出请求失败的原因。

Promise的用法

1.通过new Promise关键词创建promise对象吗,并且传入一个执行器函数,执行器函数中传入resolve和reject方法,通过调用这两种方法改变Promise的状态。

2.then方法,Promise对象的then(onfulfilled, onrejected)方法会返回一个新的Promise对象。 then方法中onfulfilled回调函数会作为新Promise对象构造时的执行器函数,且其返回值作为新Promise对象fulfilled状态下的结果,即value值。 该value值会传递给新Promise对象的then()方法中的onfulfilled回调函数。 同理,如果then方法中onfulfilled函数发生错误,则会将新Promise对象的状态定型为rejected。

3.Promise.resolve()方法

如果Promise.resolve()传入值,就将生成新的Promise对象,并将该值作为成功的参数。

如果Promise.resolve()传入的是一个Promise对象,则该实例将被直接返回。

      console.log("我是一个粉刷匠");
      Promise.resolve("我要把那小房子").then((value) => {
        console.log(value);
      }); //直接传值,resolve会返回一个promise对象,并将值传入
      const p = new Promise((resolve, reject) => {
        resolve("刷的更漂亮");
      });
      const p1 = Promise.resolve(p);
      const p2 = Promise.resolve(p).then((value) => {
        console.log(value);
      }); //传promise对象,则将这个对象返回,并将这个promise对象的value传入
      console.log(p == p1); //resolve返回的promise
      console.log(p == p2); //then返回的promise
      console.log("粉刷本领强");

4.当需要将多个Promise任务一起执行时,可以使用Promise.all( )方法。

Promise.all( )实参是所有Promise实例的字面量组成的数组,执行完毕的结果是所有输出结果的所组成的数组。

5。Promise.race(iterable) 方法,iterable为包含了多个promise对象的可迭代数据结构,如数组。

哪一个Promise状态先改变就输出谁的结果。

async/await

async函数返回的Promise对象会运行执行(resolve)异步函数的返回结果,或者如果异步函数抛出异常的话会运行拒绝(reject)。

 

async会把返回值传递给Promise.resolve( )。

 

 异步函数可以包含await指令,该指令会暂停异步函数的执行,并等待Promise执行,然后继续执行异步函数,并返回结果。 如果等待的不是 Promise 对象,则返回该值本身。 await 关键字只在异步函数内有效。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值