ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【微信小程序】封装request请求模块/wx小程序手动封装Promise

2022-08-07 21:35:17  阅读:232  来源: 互联网

标签:function 封装 微信 toWait 程序 rej thenInfo res data


// 封装请求模块
const Promise = require('./Promise.js');

const baseUrl = 'http://127.0.0.1:8080/';

function request(method, url, data) {
	return new Promise((res,rej) => {
		let header = {
		    'content-type': 'application/json' 
		};
		wx.request({
			url: baseUrl + url,
			method: method,
			header: header,
			data: method === POST ? JSON.stringify(data) : data,
			success: (result) => {
					res(result);
			},
			fail: (err) => {
				rej(err);
			}
		})
	})
}

module.exports = request
// 手动封装Promise
function promise(toWait) {
  this.t = new Date();
  this.isPromiseObject = 1;
  this.toWait = toWait;
  this.thenList = [];
  this.thenIndex = 0;
 
  this.res = function (data) {
    var thenInfo = this.thenList[this.thenIndex];
    if(!thenInfo) {
      return;
    }
    var r = thenInfo.successCallback(data);
    if (r && r.isPromiseObject) {
      this.toWait = r.toWait;
      this.toWait(this.res.bind(this), this.rej.bind(this));
    }
    this.thenIndex++;
  }
 
  this.rej = function (error) {
    var thenInfo = this.thenList[this.thenIndex];
    if(typeof thenInfo.failedCallback!='undefined'){
      thenInfo.failedCallback(error);
    } else {
      throw '未捕获的promise错误,请这then方法里,传递reject参数';
    }
  }
  this.fired = false;
  this.then = function (sc, fc) {
    var then = {
      'successCallback': sc,
      'failedCallback': fc
    }
    this.thenList.push(then);
    if (!this.fired) {
      this.fired = true;
      this.toWait(this.res.bind(this), this.rej.bind(this));
    }
    return this;
  }
}
module.exports = promise;

标签:function,封装,微信,toWait,程序,rej,thenInfo,res,data
来源: https://www.cnblogs.com/lshifu/p/16559919.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有