js中then()函数详解

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);  
      });  
    }   

有两个部分,then 和 always,两个都是可执行的方法。
always 这里不作讨论。来看看then ,它有两个参数,callback 和 errback, 第一个用来处理“resolved”和“success”事件;第二个用来处理“rejected”和“failure”事件。
所以,delay.promise不是现成的数据,还不能直接使用。然后来看看这个then怎么使用(主要是如何从中提取出我们需要的后台返回的数据):

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容