在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ Promise的鏈?zhǔn)秸{(diào)用什么原理?

Promise的鏈?zhǔn)秸{(diào)用什么原理?

大家都知道jQuery的鏈?zhǔn)秸{(diào)用是return this的妙用,那么Promise的呢?比如

function start() {  
    return new Promise((resolve, reject) => {  
      resolve('start');  
    });  
  }  
    
  start()  
    .then(data => {  
      // promise start  
      console.log('result of start: ', data);  
      return Promise.resolve(1); // p1  
    })  
    .then(data => {  
      // promise p1  
      console.log('result of p1: ', data);  
      return Promise.reject(2); // p2  
    })  
    .then(data => {  
      // promise p2  
      console.log('result of p2: ', data);  
      return Promise.resolve(3); // p3  
    })  
    .catch(ex => {  
      // promise p3  
      console.log('ex: ', ex);  
      return Promise.resolve(4); // p4  
    })  
    .then(data => {  
      // promise p4  
      console.log('result of p4: ', data);  
    });  

result of start: start
result of p1: 1
ex: 2
result of p4: 4

第三步,reject的還被下一步的then忽略掉了,這種鏈?zhǔn)秸{(diào)用是什么原理?怎么實(shí)現(xiàn)的?

回答
編輯回答
涼汐

.then返回了一個(gè)新的promise對(duì)象 也就是說 一片的then其實(shí)除了第一個(gè)是start的 其他的都不是

2018年1月28日 19:02
編輯回答
疚幼

你這個(gè)類比不合適。

第三步,reject 的還被下一步的 then 忽略掉了

正確的說法是:then調(diào)用并沒有被忽略,而是 then 里面的回調(diào)被忽略執(zhí)行了。

你試試下面這段代碼就知道了:

Promise.reject(1).then(console.log('foo bar'));

依然輸出了 foo bar,可見 then 函數(shù)其實(shí)已經(jīng)執(zhí)行了。

如果寫成:

Promise.reject(1).then(() => console.log('foo bar'));

就不會(huì)輸出了。只是說,then 函數(shù)中傳入了一個(gè)回調(diào)函數(shù),當(dāng) Promise 的狀態(tài)為 rejected 時(shí),這個(gè)回調(diào)函數(shù)沒有被執(zhí)行,并是 then 函數(shù)沒有被執(zhí)行。

我們做個(gè)合適的類比。以下 jQuery 鏈?zhǔn)秸{(diào)用:

$('#a_id_selector')
  .addClass('someclassname')
  .click(() => console.log('foo bar'))
  .prop('type', 'text');

我們運(yùn)行這段代碼,也沒有輸出 foo bar,但是我們不能說 click 函數(shù)被忽略掉了。

這樣你就明白了吧。

2017年5月22日 17:06
編輯回答
懷中人

因?yàn)榘?,每個(gè)then都返回一個(gè)新的promise,每個(gè)then都返回一個(gè)新的promise,每個(gè)then都返回一個(gè)新的promise。
返回的新的promsie會(huì)在上一個(gè)promise的狀態(tài)變更改時(shí)候開始執(zhí)行,以此類推,每次返回的新的promise被掛在上一個(gè)promise上,就此串成了一串

2017年5月13日 04:11
編輯回答
只愛你

鏈?zhǔn)秸{(diào)用的實(shí)現(xiàn)都很簡(jiǎn)單,在函數(shù)中返回值是這個(gè)對(duì)象自身就可以。

Promise對(duì)象只能從Pending轉(zhuǎn)向resolved或者從Pending轉(zhuǎn)向rejected,且狀態(tài)轉(zhuǎn)換完畢后就不會(huì)更改,也不會(huì)響應(yīng)后面的resolve和reject。這是Promise的規(guī)范定義的

Promise的實(shí)現(xiàn)有很多,本站就有很多文章有相關(guān)的闡述,可以去參看一下

2017年9月26日 06:18