js中then()函數(shù)詳解

then: function (callback, errback) {
var result = defer();

      var wrappedCallback = function(value) {  
        try {  
          result.resolve((callback || defaultCallback)(value));  
        } catch(e) {  
          exceptionHandler(e);  
          result.reject(e);  
        }  
      };  

      var wrappedErrback = function(reason) {  
        try {  
          result.resolve((errback || defaultErrback)(reason));  
        } catch(e) {  
          exceptionHandler(e);  
          result.reject(e);  
        }  
      };  

      if (pending) {  
        pending.push([wrappedCallback, wrappedErrback]);  
      } else {  
        value.then(wrappedCallback, wrappedErrback);  
      }  

      return result.promise;  
    }   

always: function (callback) {  
        
      function makePromise(value, resolved) {  
        var result = defer();  
        if (resolved) {  
          result.resolve(value);  
        } else {  
          result.reject(value);  
        }  
        return result.promise;  
      }  
        
      function handleCallback(value, isResolved) {  
        var callbackOutput = null;              
        try {  
          callbackOutput = (callback ||defaultCallback)();  
        } catch(e) {  
          return makePromise(e, false);  
        }              
        if (callbackOutput && callbackOutput.then) {  
          return callbackOutput.then(function() {  
            return makePromise(value, isResolved);  
          }, function(error) {  
            return makePromise(error, false);  
          });  
        } else {  
          return makePromise(value, isResolved);  
        }  
      }  
        
      return this.then(function(value) {  
        return handleCallback(value, true);  
      }, function(error) {  
        return handleCallback(error, false);  
      });  
    }   

有兩個(gè)部分,then 和 always,兩個(gè)都是可執(zhí)行的方法。
always 這里不作討論。來看看then ,它有兩個(gè)參數(shù),callback 和 errback, 第一個(gè)用來處理“resolved”和“success”事件;第二個(gè)用來處理“rejected”和“failure”事件。
所以,delay.promise不是現(xiàn)成的數(shù)據(jù),還不能直接使用。然后來看看這個(gè)then怎么使用(主要是如何從中提取出我們需要的后臺(tái)返回的數(shù)據(jù)):

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 你不知道JS:異步 第三章:Promises 在第二章,我們指出了采用回調(diào)來表達(dá)異步和管理并發(fā)時(shí)的兩種主要不足:缺...
    purple_force閱讀 2,234評(píng)論 0 4
  • 弄懂js異步 講異步之前,我們必須掌握一個(gè)基礎(chǔ)知識(shí)-event-loop。 我們知道JavaScript的一大特點(diǎn)...
    DCbryant閱讀 2,876評(píng)論 0 5
  • 00、前言Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大。它由社區(qū)...
    夜幕小草閱讀 2,225評(píng)論 0 12
  • 你不知道JS:異步 第三章:Promises 接上篇3-1 錯(cuò)誤處理(Error Handling) 在異步編程中...
    purple_force閱讀 1,494評(píng)論 0 2
  • ------------------------------------------------------...
    卷丫頭517閱讀 1,805評(píng)論 0 0

友情鏈接更多精彩內(nèi)容