Object.assign()和Promise的结合,你还不知道??超级无敌托马斯好用

460 阅读1分钟

在写一个小程序的时候可能要使用到tt.getUserInfo,tt.getSystemInfo,tt.getSetting。。。这些有一个共同特点,都会有一个回调函数,并且我们会使用到success内的结果。如果项目中要使用到多个这样的api,不如统一处理,用promise返回结果,避免层层回调,保持代码简洁

前提:使用promise封装一个函数这个要知道哦,如果还没有使用过,可以去看看我的第一篇文章,就是用promise封装的wx.request(); "(^_^)"

那我们直接看代码过程吧

一,可以把这些工具函数放到一个文件呀,例如utils.js中

/**
 * 
 * 用来存放工具函数
 * 
 */

// 将小程序中需要填写success回调的异步函数promise化
function promiseInit(api) {
  return function (obj = {}) {
    return new Promise((resolve, reject) => {
      obj = Object.assign(obj, {
        success: res => {
          // 成功时返回code为1
          resolve({
            code: 1,
            data: res
          });
        },
        fail: res => {
          // 失败时返回code为0
          resolve({
            code: 0,
            data: res
          });
        }
      })
      api(obj);
    })
  }
}

// 使用
const getUserInfo = promiseInit(tt.getUserInfo);
const downLoadFile = promiseInit(tt.downLoadFile);

module.exports = {
  getUserInfo,
  downLoadFile
}

在utils文件中写入了promise初始化的方法,然后将使用的apipromise化,只要符合条件,都可以promise化,然后导出就可以啦~

二,在index.js文件中使用吧

// 先要引入文件
const utils = require('../../utils/util');
Page({
  data: {},
  //注意这是promise函数,所以要结合async和await来使用
  onLoad: async function (options) {
    let result = await utils.getUserInfo();
    console.log('用户信息',result);
  }
})
这里是打印结果哦,data中就是获取到的用户信息,可以根据code的结果做判断
{code: 1, data: {…}}// 符合预期

aammnJ.jpg

如果对你有帮助记得点赞评论哦~

如果有错误,感谢指正哦~

下篇再见~