资讯专栏INFORMATION COLUMN

Promise的理解

Binguner / 2014人阅读

摘要:中就是一个构造函数函数也是对象为什么需要多个嵌套的异步操作,如果直接用方式,会导致的出现使得异步操作更加规范,更加统一。的方法构造函数构造函数用于生成对象,函数在构造函数执行时同步执行。

什么是Promise?

含以上:抽象异步操作的工具。
javascript中:Promise就是一个构造函数(函数也是对象)

为什么需要Promise?

1.多个嵌套的异步操作,如果直接用callback方式,会导致callback hell
2.Promise的出现使得异步操作更加规范,API更加统一。
3.多个异步操作之间较复杂的关系可以简单通过Promise处理。

Promise的三种状态

fulfilled:满足,成功
rejected:拒绝,失败
pending:初始状态
注:settled是指fulfilled,rejected状态之一。

Promise的方法: Promise()构造函数
Promise(
    //executor
    function( resolve,reject){
    }
);

构造函数用于生成Promise对象,executor函数在Promise构造函数执行时同步执行。
resolve,reject函数被调用时分别将Promise状态设置为fulfilled,rejected

new Promise( (resolve, reject)=>{
    resolve( "resolved value" );
});

new Promise( (resolve, reject)=>{
    reject( "rejected value" );
});
Promise.resolve, Promise.reject

Promise还提供了全局的静态方法用于快速生成Promise对象。
Promise.resolve生成fulfilled状态的Promise
Promise.reject生成rejected状态的Promise

    Promise.resolve( "resolved value" );
    Promise.reject( "rejected value" );
Promise实例方法:then( onfulfilled, onrejected ), catch( onrejected )

then和catch用于处理Promise fullfilled成功或者rejected失败时候的情况。
更加推荐的做法:
myPromise.then(onfulfilled).catch(onrejected);
这样的好处:
1.then,catch区分开,分别处理成功,失败,代码更容易理解。
2.then().then().then().catch(); then,catch方式可以捕获到前面多个then中的异常。

Promise可以链式调用的原因?

因为Promise.prototype.then方法和Promise.prototype.catch方法都返回Promise对象。所以可以链式调用:

myPromise.then(xxx).then(xxx);
Promise.prototype.then(onfulfilled, onrejected)当中,then返回的Promise和onfulfilled,onrejected的返回值有什么联系?
onfulfilled,onrejected的返回值 then,catch的返回值
值(常用)
fulfilled Promise
fulfilled Promise
throw Error异常
rejected Promise
rejected Promise
pending Promise pending Promise
多个Promise关联操作

假设有A/B/C三个Promise
1.A执行完才能执行B,B执行完才能执行C
典型的顺序执行关系,直接使用链式操作:

A.then(()=>{return B})
 .then(()=>{return C});

2.A/B执行成功了才能执行C

Promise.all([A,B]).then(
()=>{
    return C;
}
);

3.ABC中任意一个settled即可:
Promise([A,B,C]).then(xxx).catch(xxx);
注意:第一个Promise settled之后,不会取消剩余的Promise对象的执行。

额外知识:

1.Promise.resolve方法除了快速创建Promise以外,还能够将thenable(有.then方法的对象)对象转换为Promise。 典型的$.ajax()就会返回thenable对象。

2.then(onfulfilled, onrejected)中的onfulfilled,onrejected方法是异步调用的即时在调用Promise.prototype.then注册Promise时,Promise已经setteled,这2个函数也不会马上同步执行。Promise会以异步方式调用该回调函数,这个Promise设计上的规定方针。

3.如果如果没有注册onrejected函数,那么异常会抛出,只是捕获不了。

4.尽量不要使用非链式操作Promise对象, 非链式操作情况下异常不会被捕获,也不能得到then的返回值(即时then有返回值的情况)

5.使用reject而不是throw来触发Promise失败,因为throw的话很难区分是主动抛出的rejected还是程序执行出错。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/88673.html

相关文章

  • JavaScript 异步

    摘要:从最开始的到封装后的都在试图解决异步编程过程中的问题。为了让编程更美好,我们就需要引入来降低异步编程的复杂性。写一个符合规范并可配合使用的写一个符合规范并可配合使用的理解的工作原理采用回调函数来处理异步编程。 JavaScript怎么使用循环代替(异步)递归 问题描述 在开发过程中,遇到一个需求:在系统初始化时通过http获取一个第三方服务器端的列表,第三方服务器提供了一个接口,可通过...

    tuniutech 评论0 收藏0
  • ES6-7

    摘要:的翻译文档由的维护很多人说,阮老师已经有一本关于的书了入门,觉得看看这本书就足够了。前端的异步解决方案之和异步编程模式在前端开发过程中,显得越来越重要。为了让编程更美好,我们就需要引入来降低异步编程的复杂性。 JavaScript Promise 迷你书(中文版) 超详细介绍promise的gitbook,看完再不会promise...... 本书的目的是以目前还在制定中的ECMASc...

    mudiyouyou 评论0 收藏0
  • 理解 Javascript 中 Promise

    摘要:理解承诺有两个部分。如果异步操作成功,则通过的创建者调用函数返回预期结果,同样,如果出现意外错误,则通过调用函数传递错误具体信息。这将与理解对象密切相关。这个函数将创建一个,该将在到秒之间的随机数秒后执行或。 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! showImg(https://segmentfault.com/img/bVbkNvF?w=1280&h=...

    paulli3 评论0 收藏0
  • 理解 Javascript 中 Promise

    摘要:理解承诺有两个部分。如果异步操作成功,则通过的创建者调用函数返回预期结果,同样,如果出现意外错误,则通过调用函数传递错误具体信息。这将与理解对象密切相关。这个函数将创建一个,该将在到秒之间的随机数秒后执行或。 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! showImg(https://segmentfault.com/img/bVbkNvF?w=1280&h=...

    chaos_G 评论0 收藏0
  • Promise理解与实现

    摘要:对象设置初始状态默认为等待状态用数组来保存成功函数设置为成功状态设置为失败状态调用回调函数增加方法根据状态执行成功失败方法执行成功方法执行失败方法将成功失败方法保存在数组里 promise理解 promise的意思是承诺。承诺理解为某个时候一些条件满足后,会兑现一件事情。 //为了方便理解我编一个小故事 //先假装我有一个女朋友 //她承诺如果她爸妈不回来就给我就可以去帮她修电脑 否则...

    hlcc 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<