Promise&回调地狱

2018-05-06  本文已影响0人  One_Hund

一、回调

二、Promise

1.实现关注点分离

var evt=a()
b(evt)
c(evt)

(1)b,c不需要牵扯到a的调用细节。
(2)a不需要知道或关注b,c是否存在。

回调则相反:

function a(b,c){
// do something
if(evt?) b(evt);
else c(evt)
}

(1)b,c需要牵扯到a的调用细节。
(2)a需要知道或关注b,c是否存在。

2.promise信任问题

var p=Promise.resolve(42);

等同于

var p=new Promise( function(resolve,reject){
  resolve(42)
})


(2)若传入一个真正的Promise,则返回同一个promise:

var p1=Promise.resolve(42);
var p2=Promise.resolve(p1);
p1===p2; //true<br>

(3)若传入一个非Promise的thenable值(例如其他库自己实现的类Promise,但不是ES6规定的Promise),则会试图展开这个值,而且展开过程会持续到提取出一个具体的非类Promise的最终值。(p196)


2.Promise.reject(..)
reject(..)不会像resolve(..)一样进行展开,只会将传入的值原封不动地设置为拒绝理由。(例如传入一个Promise/thenable值,便原封不动地返回,不会展开提取出一个具体的非类Promise的最终值。)

上一篇下一篇

猜你喜欢

热点阅读