微信小程序里面初次使用promise封装请求并解决异步问题

1.最在在做一个canvas海报 ,客户可以扫码,并获取openid,因为要先获取Access_token,通过Access_token凭证拿到二维码,再将转来的base64转为二进制在生成临时图片,其中存在很多异步问题,所以考虑用promise来解决 ,自己感觉代码是有点繁琐 ,因为对promise没有经常用,欢迎大佬们指正。

上代码
首先封装一个请求,可传参数为url,还有给后台传的参数data

    fetch: function (url, data) {
        var promise = new Promise((resolve, reject) => {
          //init
          var that = this;
          var postData = data;
          //请求数据
          wx.request({
            url: url,
            data: postData,
            method: 'POST',
            header: { 'content-type': 'application/x-www-form-urlencoded' },
            success: function (res) {  //服务器返回数据
              resolve(res.data)
            },
            error: function (e) {
              reject('网络出错');
            }
          })
        });
        return promise;
      },

页面调用app.js的封装函数
var app = getApp(); //再当前.js文件中引入app.js

 
  app.fetch(Access_token_url, Access_token_data).then((res) => { 
     		console.log(res)
     	//	为了解决异步问题我又在这个then方法里面请求了一次,保证没有异步
     		 app.fetch(getcodeUrl, data).then((res) => {	
     		 //然后在then方法里面将图片生成微信临时路径
     		 	console.log(res)
     		 	var base64data = res
         // 获取到base64Data
         // 临时图片路径
         const filePath = `${wx.env.USER_DATA_PATH}/temp_image.png`;
         // 将base64转为二进制数据
         const buffer = wx.base64ToArrayBuffer(base64data);
         // 绘制成图片
         wx.getFileSystemManager().writeFile({
           filePath,
           data: buffer,
           encoding: 'binary',
           success() {
             wx.setStorageSync('qrcode', filePath);
             console.log(filePath)// 这个filePath就是canvas能绘制的路径
           },
           fail() {
           }
         });
 	 }})

总感觉对promise的then方法不熟悉,为了解决异步还是有点蠢,欢迎大佬们指正。

你可能感兴趣的:(前端,微信小程序)