发表于: 2019-12-03 21:11:51

1 1130


今天完成的事情:

1.后台用户管理


明天计划的事情:

学习微信小程序开发 


遇到的问题:

如何更好的复用、封装、缩减代码量

在修改小程序的时候发现一个之前的BUG,就是异步请求后获取的数据下面不能马上获取到,

开始尝试用promise来解决,但时间比较紧,做了好久没弄出来,最后大佬提示,换成了一个折中的方法,在app.js的onLaunch中写请求,下面就可以获取到数据了


收获:

下面是期间参考的promise,同时还有ES6中的promise

基于小程序request请求是异步的特性,app.js onLaunch()中的请求与index.js onLoad()中的请求是同时进行的,导致onLoad()中如果有基于onLaunch()返回的数据的请求,会有报错,这样会使onLoad()中request请求的数据“第一次”无法正常获取。

我的小程序中所有的requset请求都需要在header中带着用户唯一的token进行发起,而token是在app.js onLaunch()中的wx.login()返回中获取到的(由code到后台换取),之后通过wx.setStorageSync('token', res.data)存到小程序中。要解决问题,就需要解决request请求异步的问题,而且是在两个js文件之间。

使用Promise()


Promise 构造函数接受一个函数作为参数,该函数的两个参数分别是 resolve 方法和 reject 方法。

如果异步操作成功,则用 resolve 方法将 Promise 对象的状态,从「未完成」变为「成功」(即从 pending 变为 resolved);

如果异步操作失败,则用 reject 方法将 Promise 对象的状态,从「未完成」变为「失败」(即从 pending 变为 rejected)。

接下来在小程序中引入promise库。到bluebird官网中下载压缩版本的promise库。直接打开bluebird.core.min.js,复制代码。

Bluebird is a fully featured JavaScript promises library with unmatched performance.

小程序内新建一个promise.js文件,将bluebird.core.min.js中的代码复制进去。

在app.js中通过require引入:

这样就可以在小程序内使用promise了,该库大小大概在64kb左右,可以接受。

接下来直接贴代码:

接下来在index.js中处理

这时候清除一下开发工具的缓存,再次编译页面,打开调试面板的network,可以看到index.js中的wx.request请求是在wx.login()的success后才开始的,这样就达到了我们的目的,问题解决。




返回列表 返回列表
评论

    分享到