当先锋百科网

首页 1 2 3 4 5 6 7

封装统一请求的目的:在请求时有时会返回不同的返回码进行不同的数据处理,比如:返回正常时,进行正常操作,如果返回了异常,那么就需要进行不同的处理了,由于每次请求都可能出现各种返回码,所以进行请求封装,进行统一异常处理。

在小程序中提供的请求:

wx.request({  

          url: url, 

           data: params,

            method: 'POST', 

           header: {                'content-type': 'application/x-www-form-urlencoded'            },

            success: function (result){ 

   }})

 

默认是一个异步请求,我在封装时采用封装同步请求的方式。

在这里我使用了ES6中的 es6-promise,Promise的特点是同步操作,可以创建数个Promise对象,把需要同步的代码封装到Promise对象中 

   let promisevariable = new Promise(function (resolve, reject) { 

       wx.request({

            url: servser+url,

            data: params, 

           method: 'POST', 

           header: {                'content-type': 'application/x-www-form-urlencoded'            }, 

           success: function (result){ 

               var status = result.statusCode; 

               if(status == 500){ 

                   //程序抛出异常

                   var exception = result.data.exception; 

                   var msg = result.data.message; 

                   var path = result.data.path;

                                           wx.showToast({

                        title: exception+"\r\n"+msg+"\n\r"+path, 

                       icon: 'loading',

                        duration: 1000

                    }); 

                   resolve(null); 

                   return ;

                }

                if(status != 200){

                    //系统未知异常

                    var msg = result.data.error;  

                  var path = result.data.path;

                       wx.showToast({

                        title: msg+"\n\r"+path,

                        icon: 'loading',

                        duration: 1000

                    });  

                  resolve(null);   

                 return ;          

      }                //自定义异常  

              var sta = result.data.status;

                if(sta != 200){

                    var msg = result.data.message; 

                   wx.showToast({ 

                       title: msg,   

                     icon: 'loading',  

                      duration: 1000

                    });

                    resolve(null);

                    return ;

                }  

                              resolve(result);

//这里就是每个Promise对象的结果

            }

        }); 

   }); 

 

然后把该对象按顺序放到一个数组中,使用Promise提供的方法 Promise.all

Promise.all([数组对象]).then(function(values) { 

//这里就可以顺序执行并得到每个结果 

console.log(values);

});

---------------------

 

 


//引入Promise

var Promise = require('./es6-promise.auto.js');

//获取服务器地址

var servser = getApp().data.servsers;

console.log(servser);

//默认请求

function sendRequest(url,params){

   

    let promisevariable = new Promise(function (resolve, reject) {

        wx.request({

            url: servser+url,

            data: params,

            method: 'POST',

            header: {

                'content-type': 'application/x-www-form-urlencoded'

            },

            success: function (result){

                var status = result.statusCode;

                if(status == 500){

                    //程序抛出异常

                    var exception = result.data.exception;

                    var msg = result.data.message;

                    var path = result.data.path;  

                   

                    wx.showToast({

                        title: exception+"\r\n"+msg+"\n\r"+path,

                        icon: 'loading',

                        duration: 1000

                    });

                    resolve(null);

                    return ;

                }

                if(status != 200){

                    //系统未知异常

                    var msg = result.data.error;

                    var path = result.data.path;  

                    wx.showToast({

                        title: msg+"\n\r"+path,

                        icon: 'loading',

                        duration: 1000

                    });

                    resolve(null);

                    return ;

                }

 

 

                //自定义异常

                var sta = result.data.status;

                if(sta != 200){

                    var msg = result.data.message;

                    wx.showToast({

                        title: msg,

                        icon: 'loading',

                        duration: 1000

                    });

                    resolve(null);

                    return ;

                }

               

                resolve(result);

            }

        });

    });

    return promisevariable;

}

 

 

 

//暴露公共访问接口

module.exports = {

  sendRequest: sendRequest,//公布公共请求接口

}

 

 

 

使用:

 


 var url = "/home/test";

        var params = {msg: '哈哈哈'}

        requestHandler.sendRequest(url,params).then(values => {

            console.log(values.data)

            this.setData({

                result : values.data

            });

        })

 

 

 

es6-promise.auto.js

 


 

(function (global, factory) {

 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :

 typeof define === 'function' && define.amd ? define(factory) :

 (global.ES6Promise = factory());

}(this, (function () { 'use strict';

 

function objectOrFunction(x) {

  var type = typeof x;

  return x !== null && (type === 'object' || type === 'function');

}

 

function isFunction(x) {

  return typeof x === 'function';

}

 

 

 

var _isArray = void 0;

if (Array.isArray) {

  _isArray = Array.isArray;

} else {

  _isArray = function (x) {

    return Object.prototype.toString.call(x) === '[object Array]';

  };

}

 

var isArray = _isArray;

 

var len = 0;

var vertxNext = void 0;

var customSchedulerFn = void 0;

 

var asap = function asap(callback, arg) {

  queue[len] = callback;

  queue[len + 1] = arg;

  len += 2;

  if (len === 2) {

    // If len is 2, that means that we need to schedule an async flush.

    // If additional callbacks are queued before the queue is flushed, they

    // will be processed by this flush that we are scheduling.

    if (customSchedulerFn) {

      customSchedulerFn(flush);

    } else {

      scheduleFlush();

    }

  }

};

 

function setScheduler(scheduleFn) {

  customSchedulerFn = scheduleFn;

}

 

function setAsap(asapFn) {

  asap = asapFn;

}

 

var browserWindow = typeof window !== 'undefined' ? window : undefined;

var browserGlobal = browserWindow || {};

var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;

var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';

 

// test for web worker but not in IE10

var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';

 

// node

function useNextTick() {

  // node version 0.10.x displays a deprecation warning when nextTick is used recursively

  // see https://github.com/cujojs/when/issues/410 for details

  return function () {

    return process.nextTick(flush);

  };

}

 

// vertx

function useVertxTimer() {

  if (typeof vertxNext !== 'undefined') {

    return function () {

      vertxNext(flush);

    };

  }

 

  return useSetTimeout();

}

 

function useMutationObserver() {

  var iterations = 0;

  var observer = new BrowserMutationObserver(flush);

  var node = document.createTextNode('');

  observer.observe(node, { characterData: true });

 

  return function () {

    node.data = iterations = ++iterations % 2;

  };

}

 

// web worker

function useMessageChannel() {

  var channel = new MessageChannel();

  channel.port1.onmessage = flush;

  return function () {

    return channel.port2.postMessage(0);

  };

}

 

function useSetTimeout() {

  // Store setTimeout reference so es6-promise will be unaffected by

  // other code modifying setTimeout (like sinon.useFakeTimers())

  var globalSetTimeout = setTimeout;

  return function () {

    return globalSetTimeout(flush, 1);

  };

}

 

var queue = new Array(1000);

function flush() {

  for (var i = 0; i < len; i += 2) {

    var callback = queue[i];

    var arg = queue[i + 1];

 

    callback(arg);

 

    queue[i] = undefined;

    queue[i + 1] = undefined;

  }

 

  len = 0;

}

 

function attemptVertx() {

  try {

    var vertx = Function('return this')().require('vertx');

    vertxNext = vertx.runOnLoop || vertx.runOnContext;

    return useVertxTimer();

  } catch (e) {

    return useSetTimeout();

  }

}

 

var scheduleFlush = void 0;

// Decide what async method to use to triggering processing of queued callbacks:

if (isNode) {

  scheduleFlush = useNextTick();

} else if (BrowserMutationObserver) {

  scheduleFlush = useMutationObserver();

} else if (isWorker) {

  scheduleFlush = useMessageChannel();

} else if (browserWindow === undefined && typeof require === 'function') {

  scheduleFlush = attemptVertx();

} else {

  scheduleFlush = useSetTimeout();

}

 

function then(onFulfillment, onRejection) {

  var parent = this;

 

  var child = new this.constructor(noop);

 

  if (child[PROMISE_ID] === undefined) {

    makePromise(child);

  }

 

  var _state = parent._state;

 

 

  if (_state) {

    var callback = arguments[_state - 1];

    asap(function () {

      return invokeCallback(_state, child, callback, parent._result);

    });

  } else {

    subscribe(parent, child, onFulfillment, onRejection);

  }

 

  return child;

}

 

function resolve$1(object) {

 

  var Constructor = this;

 

  if (object && typeof object === 'object' && object.constructor === Constructor) {

    return object;

  }

 

  var promise = new Constructor(noop);

  resolve(promise, object);

  return promise;

}

 

var PROMISE_ID = Math.random().toString(36).substring(2);

 

function noop() {}

 

var PENDING = void 0;

var FULFILLED = 1;

var REJECTED = 2;

 

var TRY_CATCH_ERROR = { error: null };

 

function selfFulfillment() {

  return new TypeError("You cannot resolve a promise with itself");

}

 

function cannotReturnOwn() {

  return new TypeError('A promises callback cannot return that same promise.');

}

 

function getThen(promise) {

  try {

    return promise.then;

  } catch (error) {

    TRY_CATCH_ERROR.error = error;

    return TRY_CATCH_ERROR;

  }

}

 

function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {

  try {

    then$$1.call(value, fulfillmentHandler, rejectionHandler);

  } catch (e) {

    return e;

  }

}

 

function handleForeignThenable(promise, thenable, then$$1) {

  asap(function (promise) {

    var sealed = false;

    var error = tryThen(then$$1, thenable, function (value) {

      if (sealed) {

        return;

      }

      sealed = true;

      if (thenable !== value) {

        resolve(promise, value);

      } else {

        fulfill(promise, value);

      }

    }, function (reason) {

      if (sealed) {

        return;

      }

      sealed = true;

 

      reject(promise, reason);

    }, 'Settle: ' + (promise._label || ' unknown promise'));

 

    if (!sealed && error) {

      sealed = true;

      reject(promise, error);

    }

  }, promise);

}

 

function handleOwnThenable(promise, thenable) {

  if (thenable._state === FULFILLED) {

    fulfill(promise, thenable._result);

  } else if (thenable._state === REJECTED) {

    reject(promise, thenable._result);

  } else {

    subscribe(thenable, undefined, function (value) {

      return resolve(promise, value);

    }, function (reason) {

      return reject(promise, reason);

    });

  }

}

 

function handleMaybeThenable(promise, maybeThenable, then$$1) {

  if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {

    handleOwnThenable(promise, maybeThenable);

  } else {

    if (then$$1 === TRY_CATCH_ERROR) {

      reject(promise, TRY_CATCH_ERROR.error);

      TRY_CATCH_ERROR.error = null;

    } else if (then$$1 === undefined) {

      fulfill(promise, maybeThenable);

    } else if (isFunction(then$$1)) {

      handleForeignThenable(promise, maybeThenable, then$$1);

    } else {

      fulfill(promise, maybeThenable);

    }

  }

}

 

function resolve(promise, value) {

  if (promise === value) {

    reject(promise, selfFulfillment());

  } else if (objectOrFunction(value)) {

    handleMaybeThenable(promise, value, getThen(value));

  } else {

    fulfill(promise, value);

  }

}

 

function publishRejection(promise) {

  if (promise._onerror) {

    promise._onerror(promise._result);

  }

 

  publish(promise);

}

 

function fulfill(promise, value) {

  if (promise._state !== PENDING) {

    return;

  }

 

  promise._result = value;

  promise._state = FULFILLED;

 

  if (promise._subscribers.length !== 0) {

    asap(publish, promise);

  }

}

 

function reject(promise, reason) {

  if (promise._state !== PENDING) {

    return;

  }

  promise._state = REJECTED;

  promise._result = reason;

 

  asap(publishRejection, promise);

}

 

function subscribe(parent, child, onFulfillment, onRejection) {

  var _subscribers = parent._subscribers;

  var length = _subscribers.length;

 

 

  parent._onerror = null;

 

  _subscribers[length] = child;

  _subscribers[length + FULFILLED] = onFulfillment;

  _subscribers[length + REJECTED] = onRejection;

 

  if (length === 0 && parent._state) {

    asap(publish, parent);

  }

}

 

function publish(promise) {

  var subscribers = promise._subscribers;

  var settled = promise._state;

 

  if (subscribers.length === 0) {

    return;

  }

 

  var child = void 0,

      callback = void 0,

      detail = promise._result;

 

  for (var i = 0; i < subscribers.length; i += 3) {

    child = subscribers[i];

    callback = subscribers[i + settled];

 

    if (child) {

      invokeCallback(settled, child, callback, detail);

    } else {

      callback(detail);

    }

  }

 

  promise._subscribers.length = 0;

}

 

function tryCatch(callback, detail) {

  try {

    return callback(detail);

  } catch (e) {

    TRY_CATCH_ERROR.error = e;

    return TRY_CATCH_ERROR;

  }

}

 

function invokeCallback(settled, promise, callback, detail) {

  var hasCallback = isFunction(callback),

      value = void 0,

      error = void 0,

      succeeded = void 0,

      failed = void 0;

 

  if (hasCallback) {

    value = tryCatch(callback, detail);

 

    if (value === TRY_CATCH_ERROR) {

      failed = true;

      error = value.error;

      value.error = null;

    } else {

      succeeded = true;

    }

 

    if (promise === value) {

      reject(promise, cannotReturnOwn());

      return;

    }

  } else {

    value = detail;

    succeeded = true;

  }

 

  if (promise._state !== PENDING) {

    // noop

  } else if (hasCallback && succeeded) {

    resolve(promise, value);

  } else if (failed) {

    reject(promise, error);

  } else if (settled === FULFILLED) {

    fulfill(promise, value);

  } else if (settled === REJECTED) {

    reject(promise, value);

  }

}

 

function initializePromise(promise, resolver) {

  try {

    resolver(function resolvePromise(value) {

      resolve(promise, value);

    }, function rejectPromise(reason) {

      reject(promise, reason);

    });

  } catch (e) {

    reject(promise, e);

  }

}

 

var id = 0;

function nextId() {

  return id++;

}

 

function makePromise(promise) {

  promise[PROMISE_ID] = id++;

  promise._state = undefined;

  promise._result = undefined;

  promise._subscribers = [];

}

 

function validationError() {

  return new Error('Array Methods must be provided an Array');

}

 

var Enumerator = function () {

  function Enumerator(Constructor, input) {

    this._instanceConstructor = Constructor;

    this.promise = new Constructor(noop);

 

    if (!this.promise[PROMISE_ID]) {

      makePromise(this.promise);

    }

 

    if (isArray(input)) {

      this.length = input.length;

      this._remaining = input.length;

 

      this._result = new Array(this.length);

 

      if (this.length === 0) {

        fulfill(this.promise, this._result);

      } else {

        this.length = this.length || 0;

        this._enumerate(input);

        if (this._remaining === 0) {

          fulfill(this.promise, this._result);

        }

      }

    } else {

      reject(this.promise, validationError());

    }

  }

 

  Enumerator.prototype._enumerate = function _enumerate(input) {

    for (var i = 0; this._state === PENDING && i < input.length; i++) {

      this._eachEntry(input[i], i);

    }

  };

 

  Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {

    var c = this._instanceConstructor;

    var resolve$$1 = c.resolve;

 

 

    if (resolve$$1 === resolve$1) {

      var _then = getThen(entry);

 

      if (_then === then && entry._state !== PENDING) {

        this._settledAt(entry._state, i, entry._result);

      } else if (typeof _then !== 'function') {

        this._remaining--;

        this._result[i] = entry;

      } else if (c === Promise$2) {

        var promise = new c(noop);

        handleMaybeThenable(promise, entry, _then);

        this._willSettleAt(promise, i);

      } else {

        this._willSettleAt(new c(function (resolve$$1) {

          return resolve$$1(entry);

        }), i);

      }

    } else {

      this._willSettleAt(resolve$$1(entry), i);

    }

  };

 

  Enumerator.prototype._settledAt = function _settledAt(state, i, value) {

    var promise = this.promise;

 

 

    if (promise._state === PENDING) {

      this._remaining--;

 

      if (state === REJECTED) {

        reject(promise, value);

      } else {

        this._result[i] = value;

      }

    }

 

    if (this._remaining === 0) {

      fulfill(promise, this._result);

    }

  };

 

  Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {

    var enumerator = this;

 

    subscribe(promise, undefined, function (value) {

      return enumerator._settledAt(FULFILLED, i, value);

    }, function (reason) {

      return enumerator._settledAt(REJECTED, i, reason);

    });

  };

 

  return Enumerator;

}();

 

function all(entries) {

  return new Enumerator(this, entries).promise;

}

 

function race(entries) {

 

  var Constructor = this;

 

  if (!isArray(entries)) {

    return new Constructor(function (_, reject) {

      return reject(new TypeError('You must pass an array to race.'));

    });

  } else {

    return new Constructor(function (resolve, reject) {

      var length = entries.length;

      for (var i = 0; i < length; i++) {

        Constructor.resolve(entries[i]).then(resolve, reject);

      }

    });

  }

}

 

function reject$1(reason) {

 

  var Constructor = this;

  var promise = new Constructor(noop);

  reject(promise, reason);

  return promise;

}

 

function needsResolver() {

  throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');

}

 

function needsNew() {

  throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");

}

 

 

var Promise$2 = function () {

  function Promise(resolver) {

    this[PROMISE_ID] = nextId();

    this._result = this._state = undefined;

    this._subscribers = [];

 

    if (noop !== resolver) {

      typeof resolver !== 'function' && needsResolver();

      this instanceof Promise ? initializePromise(this, resolver) : needsNew();

    }

  }

 

 

 

 

 

 

  Promise.prototype.catch = function _catch(onRejection) {

    return this.then(null, onRejection);

  };

 

 

 

 

  Promise.prototype.finally = function _finally(callback) {

    var promise = this;

    var constructor = promise.constructor;

 

    return promise.then(function (value) {

      return constructor.resolve(callback()).then(function () {

        return value;

      });

    }, function (reason) {

      return constructor.resolve(callback()).then(function () {

        throw reason;

      });

    });

  };

 

  return Promise;

}();

 

Promise$2.prototype.then = then;

Promise$2.all = all;

Promise$2.race = race;

Promise$2.resolve = resolve$1;

Promise$2.reject = reject$1;

Promise$2._setScheduler = setScheduler;

Promise$2._setAsap = setAsap;

Promise$2._asap = asap;

 

function polyfill() {

  var local = void 0;

 

  if (typeof global !== 'undefined') {

    local = global;

  } else if (typeof self !== 'undefined') {

    local = self;

  } else {

    try {

      local = Function('return this')();

    } catch (e) {

      throw new Error('polyfill failed because global object is unavailable in this environment');

    }

  }

 

  var P = local.Promise;

 

  if (P) {

    var promiseToString = null;

    try {

      promiseToString = Object.prototype.toString.call(P.resolve());

    } catch (e) {

      // silently ignored

    }

 

    if (promiseToString === '[object Promise]' && !P.cast) {

      return;

    }

  }

 

  local.Promise = Promise$2;

}

 

// Strange compat..

Promise$2.polyfill = polyfill;

Promise$2.Promise = Promise$2;

 

Promise$2.polyfill();

 

return Promise$2;

 

})));

 

 

 

//# sourceMappingURL=es6-promise.auto.map

转载于:https://www.cnblogs.com/gentrywolf/p/10115336.html