微信小程序> 微信小程序异步转同步的实现

微信小程序异步转同步的实现

浏览量:723 时间: 来源:frankxixu

一、参考文档

https://blog.csdn.net/Cpath/article/details/79525893

二、login等原生方法转同步

(1)引入库

bluebird.js 文件地址 https://cdn.jsdelivr.net/bluebird/latest/bluebird.min.js

(2)util.js

var Promise = require('bluebird.js')  //我用了bluebird.js 文件地址  https://cdn.jsdelivr.net/bluebird/latest/bluebird.min.js
function wxPromisify(fn) {
  return function (obj = {}) {
    return new Promise((resolve, reject) = {
      obj.success = function (res) {
        resolve(res)
      }

      obj.fail = function (res) {
        reject(res)
      }

      fn(obj)
    })
  }
}

module.exports = {
  wxPromisify: wxPromisify
}
(3)、使用方法

index.js中

var util = require('../../utils/util.js');

onLoad: function (options) {
  var that = this;
  uid = wx.getStorageSync('user_id');

  if (uid == '') {
   # 注意:wxPromisify括号中的方法不需要加括号直接wx.login, wxPromisify括号中的方法,我试了试自己定义的方法好像不可以,所以现在我用的是微信自带的方法。我的业务中暂时也只有授权用到同步..................
    var wxLogin = util.wxPromisify(wx.login);    

    wxLogin().then(function (res) {
      var data = {
        code: res.code
      };
      api._post(api.HOST_URI + 'appletsys/getUserOpenId', data, function (res) {
        wx.setStorageSync('openid', res.data.data.openid);
        wx.setStorageSync('token', res.data.data.token);
      })
    }).catch(function (res) {
      wx.showToast({
        title: '登录失败!',
        icon: 'loading',
        duration: 1000
      })
})

 

三、get post的转同步,包含第二种实现方法,简化版本

(1)util.js

const app = getApp();
const headerConfig = {
  "Content-Type": "application/json",
}
const baseUrl = "https://www.clockone.xyz/";
export function wxPromise(fn) {
  return function (obj = {}) {
    return new Promise((resolve, reject) = {
      obj.success = res = {
        resolve(res)
      };
      obj.fail = res = {
        reject(res)
      };
      fn(obj)
    })
  }
}
// 这是对post请求的封装
export function post(url, data = {}) {
  return new Promise((resolve, reject) = {
    //网络请求
    wx.request({
      url: baseUrl + url,
      data,
      method: 'POST',
      header: headerConfig,
      success: function (res) {//服务器返回数据
        resolve(res);
      },
      fail: function (error) {
        reject(error);
      }
    })
  });
}
// 这是对get请求的封装
export function get(url, data = {}) {
  return new Promise((resolve, reject) = {
    //网络请求
    wx.request({
      url: baseUrl + url,
      data,
      method: 'GET',
      header: headerConfig,
      success: function (res) {//服务器返回数据
        resolve(res);
      },
      fail: function (error) {
        reject(error);
      }
    })
  });
}

(2)、使用 index.js

import { get, wxPromise } from "utils";

getOpenID:function(){
    wxPromise(wx.login)()
    .then(res = get("/onReceiveCode", { code: res.code }))
    .then(res ={
      console.log(res.data);
      wx.setStorageSync("openID", res.data)
    })
  },

 

//也可以在1个then中的最后一行,使用return 调用下一个方法

 

 

get("onQueryTask", { "openID": openID})
    .then(res ={
    })

 

 

 

 

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎