Promise本质

本质上,Promise是返回一个对象,你可以在上面添加回调函数,而不像普通的回调那样,向函数传送回调函数。

Promise提供的保证:

        1、

 

Promise的作用:

     1、将我们从深层内嵌回调中解脱出来

// 深层内嵌回调函数,使用链式函数来摆脱深层的内嵌
doSomething(function(result) {
  doSomethingElse(result, function(newResult) {
    doThirdThing(newResult, function(finalResult) {
      console.log('Got the final result: ' + finalResult);
    }, failureCallback);
  }, failureCallback);
}, failureCallback);

深层内嵌的缺点:
    1、不能统一处理回调函数的异常
    2、可读性差

    2、提供了串行能力Promise.All(), Promise.rice()

    3、异步执行能力。函数内嵌callback和Promise都能提供异步能力。

问题:

    1、new Promise时,传入的函数是否必须是返回promise的

    2、then中的函数是不是必须返回promise

    3、多个then是否可以同时得到new Promise返回的值

    4、异步执行变同步?

 

使用场景:

1、不能直接new Promise();

9305295d32317e83c21fdbf82659371957d.jpg

2、new Promise传入一个普通函数,函数得到执行,但then不会执行,因为Promise的状态一直是pending,没有发生改变

f3a5d17edd939c94b0c1ba70d3efc2a00e0.jpg

3、new Promise传入带有resolve,reject参数的函数,函数执行完成时调用resolve()触发状态改变,但没有返回值

44462b3c088c30863fd4dc7d449dd08bba4.jpg

4、new Promise时传入的函数参数名称没有限制,第一个参数代表resolve(函数执行成功),第二个参数代表reject(函数执行失败),只传入一个参数代表resolve。

cdf154cb7fa960c7301da3bb7bddca28fea.jpg

5、如果触发reject(),then和catch不链式书写,then执行是会报错,catch能执行。如果链式书写then不执行,直接执行catch。

c954332a58119ee5ec34ac0d8e804c0c1f3.jpg

链式书写:
 d819be2783209bf9dd32ec470a6565b5118.jpg

6、new Promise初始执行的函数的返回值,只能传递到第一个then,不能一直向下传播。then中需要返回promise对象,promise对象返回的值才能被下一个then读取。

22d02d8f20540c8ef93d3ce0d9d0a46befd.jpg

7、then接收两个函数,一个是执行成功的回调函数,一个是执行失败的回调函数,catch=then(null,fail),但是then(null,fail)不能全局拦截异常,只能拦截上一个then或者初始化promise抛出的异常。

8、then()函数return的值可以被下一个then接收

12c40e5ed77cb5f2b1278e833ca5b7c7826.jpg

9、then中可以返回promise,promise被触发resolved状态的返回值,可以被下一个then接收。

07f758c4873b61c0e5d3d699e2590268ba8.jpg

10、then中可以返回promise,promise如果没有触发resolved状态,则其后的then不会被执行。

11a4dee0511d12e2766434ed1ccef0aaacb.jpg

11、Promise.reject()和Promise.resolve()都会返回一个Promise实例。

01d28293005d383296e029f52d20a563145.jpg

12、Promise.resolve()返回的实例可以添加then,then会立即执行。

2ac3416782010a25e93784a953e6bdd2cb4.jpg

13、Promise.reject()返回的实例可以添加then,catch会立即执行。

62f805d3c8c79f1a4937fa94e83fe4fcd12.jpg

转载于:https://my.oschina.net/773355/blog/3042656

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值