久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      5.1 ES6 Promise 對象


      概述

      是異步編程的一種解決方案。

      從語法上說,Promise 是一個對象,從它可以獲取異步操作的消息。

      Promise 狀態(tài)

      狀態(tài)的特點

      Promise 異步操作有三種狀態(tài):pending(進行中)、fulfilled(已成功)和 rejected(已失?。?。除了異步操作的結(jié)果,任何其他操作都無法改變這個狀態(tài)。

      Promise 對象只有:從 pending 變?yōu)?fulfilled 和從 pending 變?yōu)?rejected 的狀態(tài)改變。只要處于 fulfilled 和 rejected ,狀態(tài)就不會再變了即 resolved(已定型)。

      const p1 = new Promise(function(resolve,reject){ resolve(success1); resolve(success2); }); const p2 = new Promise(function(){ resolve(success3); reject(reject); }); p1.then(function(value){ console.log(value); // success1 }); p2.then(function(value){ console.log(value); // success3 });

      狀態(tài)的缺點

      無法取消 Promise ,一旦新建它就會立即執(zhí)行,無法中途取消。

      如果不設(shè)置回調(diào)函數(shù),Promise 內(nèi)部拋出的錯誤,不會反應(yīng)到外部。

      當(dāng)處于 pending 狀態(tài)時,無法得知目前進展到哪一個階段(剛剛開始還是即將完成)。

      then 方法

      then 方法接收兩個函數(shù)作為參數(shù),第一個參數(shù)是 Promise 執(zhí)行成功時的回調(diào),第二個參數(shù)是 Promise 執(zhí)行失敗時的回調(diào),兩個函數(shù)只會有一個被調(diào)用。

      then 方法的特點

      在 JavaScript 事件隊列的當(dāng)前運行完成之前,回調(diào)函數(shù)永遠(yuǎn)不會被調(diào)用。

      const p = new Promise(function(resolve,reject){ resolve(success); }); p.then(function(value){ console.log(value); }); console.log(first); // first // success

      通過 .then 形式添加的回調(diào)函數(shù),不論什么時候,都會被調(diào)用。

      通過多次調(diào)用

      .then

      ,可以添加多個回調(diào)函數(shù),它們會按照插入順序并且獨立運行。

      const p = new Promise(function(resolve,reject){ resolve(1); }).then(function(value){ // 第一個then // 1 console.log(value); return value * 2; }).then(function(value){ // 第二個then // 2 console.log(value); }).then(function(value){ // 第三個then // undefined console.log(value); return Promise.resolve(resolve); }).then(function(value){ // 第四個then // resolve console.log(value); return Promise.reject(reject); }).then(function(value){ // 第五個then //reject:reject console.log(resolve: + value); }, function(err) { console.log(reject: + err); });

      then 方法將返回一個 resolved 或 rejected 狀態(tài)的 Promise 對象用于鏈?zhǔn)秸{(diào)用,且 Promise 對象的值就是這個返回值。

      then 方法注意點

      簡便的 Promise 鏈?zhǔn)骄幊套詈帽3直馄交?,不要嵌?Promise。

      注意總是返回或終止 Promise 鏈。

      const p1 = new Promise(function(resolve,reject){ resolve(1); }).then(function(result) { ? p2(result).then(newResult => p3(newResult)); }).then(() => p4());

      創(chuàng)建新 Promise 但忘記返回它時,對應(yīng)鏈條被打破,導(dǎo)致 p4 會與 p2 和 p3 同時進行。

      大多數(shù)瀏覽器中不能終止的 Promise 鏈里的 rejection,建議后面都跟上 .catch(error => console.log(error));


      更多文章

      JavaScript Promise 對象

      贊(0)
      分享到: 更多 (0)
      ?
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號