text: /**
   * Promise adapter.
   */
  
  // import PromiseLib from './lib/promise';
  //
  // if (typeof Promise === 'undefined') {
  //     window.Promise = PromiseLib;
  // }
  
  // 封装 promise 加上context 来解决在vue 实例中this指向问题
  export default function PromiseObj(executor, context) {
  
      if (executor instanceof Promise) {
          this.promise = executor;
      } else {
          this.promise = new Promise(executor.bind(context));
      }
  
      this.context = context;
  }
  
  PromiseObj.all = function (iterable, context) {
      return new PromiseObj(Promise.all(iterable), context);
  };
  
  PromiseObj.resolve = function (value, context) {
      return new PromiseObj(Promise.resolve(value), context);
  };
  
  PromiseObj.reject = function (reason, context) {
      return new PromiseObj(Promise.reject(reason), context);
  };
  
  PromiseObj.race = function (iterable, context) {
      return new PromiseObj(Promise.race(iterable), context);
  };
  
  const p = PromiseObj.prototype;
  
  p.bind = function (context) {
      this.context = context;
      return this;
  };
  
  p.then = function (fulfilled, rejected) {
  
      if (fulfilled && fulfilled.bind && this.context) {
          fulfilled = fulfilled.bind(this.context);
      }
  
      if (rejected && rejected.bind && this.context) {
          rejected = rejected.bind(this.context);
      }
  
      return new PromiseObj(this.promise.then(fulfilled, rejected), this.context);
  };
  
  p.catch = function (rejected) {
  
      if (rejected && rejected.bind && this.context) {
          rejected = rejected.bind(this.context);
      }
  
      return new PromiseObj(this.promise.catch(rejected), this.context);
  };
  
  p.finally = function (callback) {
  
      return this.then(function (value) {
          callback.call(this);
          return value;
      }, function (reason) {
          callback.call(this);
          return Promise.reject(reason);
      });
  };
  