五分钟了解Promise

什么是promise?

promise 表示的是一个未来即将发生事情。它的构建形式为


new Promise(/**executor **/function(resolve,rejected){

    //ajax

    if(success){

      resolve(successResult)

    }else{

      rejected(errorInfo)

  }

 })

  • 当promise创建的时候就会立即executor,这时候promise处于pending状态

  • 当某个异步操作成功执行后,通过调用resolve可以变更promise的状态为fulfilled。

  • 当某个异步操作执行失败后,通过调用reject变更promise的状态为rejected。

这里的reject 和resolve 都是内置的函数,通过他们可以修改promise状态。如果不掉用则状态无法变更(处于pending状态)

当promise状态变更后又会触发其链式方法的调用。


new Promise(function(resolved,reject){

if(success)

resolved(222)

else

reject(333);

}).then((res)=>{console.log(res)}).catch(e=>{console.log(e)})

如上述代码所示:

  • 当处于reject状态(reject方法被调用)catch方法会被调用,then方法(无则不会,

  • 当resolve被调用则then方法会执行,而catch则不会。所以promise又有一种状态机的即视感。

  • 这里要补充一下then 方法全部参数如下所示:Promise.prototype.then(onFulfilled, onRejected)所以如果你有传入onRejected参数,那么出现异常的时候then也会被执行,即OnRejected被调用。

promise状态变更详细状态如下所示:

image

await async 与promise 的应用

如下typescript代码所示,过去我们使用setTimeout做延时任务,其书写方式相对麻烦需要传入回调函数并出现多重嵌套。现在可以通过async await 以及promise 解决这个问题


async function timeout(time:Number) {

      return new Promise(resolve => setTimeout(resolve, time));

}


  try{

    await timeout(5000);

  }catch(error){

        ....

  }

async表示一个异步方法,它必须返回promise,而await 表示等待promise状态发生变更后才继续执行后续语句(即变为rejected or fullfilled)。如果处于rejected则会抛出异常用catch块捕获,如果为fullfilled则正常执行。

参考:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 弄懂js异步 讲异步之前,我们必须掌握一个基础知识-event-loop。 我们知道JavaScript的一大特点...
    DCbryant阅读 7,671评论 0 5
  • 简单介绍下这几个的关系为方便起见 用以下代码为例简单介绍下这几个东西的关系, async 在函数声明前使用asyn...
    _我和你一样阅读 21,407评论 1 24
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 13,749评论 26 95
  • 00、前言Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区...
    夜幕小草阅读 6,406评论 0 12
  • Promiese 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果,语法上说,Pr...
    雨飞飞雨阅读 8,650评论 0 19

友情链接更多精彩内容