- 登录成功回退页面
开头不知道怎么讲。。。 就给大家拜个早年吧!!! [图片] 首先创建两个实例,可以换成项目中某个页面跳转的类目。 [图片] 分别跳转两个页面。。。 然后就是函数了, [图片] navigateTo 函数三个参数 分别是 url param limited url : 点击需要跳转的路径 param : 路径后面传的参数 limited : 布尔值 (判断是否需要登录) fun 为跳转方法 是否需要登录 或 定义的登录态user 是否为true 来判断是否跳转 [图片] 这个就很好理解了 判断有没有传递参数 有的话就拼接到路径后面。 然后没有登录 去login页登录去 [图片] 这里。。。。 嗯。。。。 算了 我不想说了 大家去看代码片段吧 都有注释。。。。 https://developers.weixin.qq.com/s/USuLAvmM7LcH
2019-10-31 - 小程序用async await实现同步出现问题?
如图,finishTest函数调用getCompletionGrade函数,需要等待getCompletionGrade返回的结果, 从打印结果来看,finishTest中的async await并没有起作用,理想结果应该是打印“函数执行前、中、后”, 现在从打印的结果看,还是异步执行。已经设置了ES6转ES5和增强编译,如一些资料所说引入generator支持库 let regeneratorRuntime = require("../../utils/regenerator-runtime/runtime") 之后也是不行 [图片][图片][图片]
2020-03-21 - 小程序改造成async/await模式
补充:以下是原生用法: https://developers.weixin.qq.com/community/develop/article/doc/00028cbc2e04e0ddf549d535351c13 简单两步: 1、把这个文件下载并引用进来: https://github.com/facebook/regenerator/blob/master/packages/regenerator-runtime/runtime.js 2、在使用时声明一下: const regeneratorRuntime = require('./lib/runtime.js') 然后就可以使用async/await了。 补充如下:以上方案已经过期作废,小程序原生支持async/await了,(es6转es5别勾)
2020-04-01 - async await 异步转同步为什么没有实现?
async await 异步转同步为什么没有实现? 代码截图,预期是数据库操作执行完后 打印日志,但实际总是先打印日志,求指点,(其中数据库中的操作比较复杂,有3张表的联表查询,但这个应该和异步转同步没啥关系吧) [图片] [图片] 数据库的操作 [图片]
2020-04-01 - 小程序使用async/await 来处理异步
小程序使用async/await 来处理异步 regeneratorRuntime https://github.com/facebook/regenerator/blob/master/packages/regenerator-runtime/runtime.js 详细看代码片段 https://developers.weixin.qq.com/s/FlIPCOmw7P3c //引入编译模块 const regeneratorRuntime =require("../libs/regeneratorRuntime.js") const promisify = require('../libs/promisify.js'); //微信 API,转成返回 Promise 的接口 云开发API的有Promise 风格 不需要再转了 const getUserInfo= promisify(wx.getUserInfo); const login = promisify(wx.login); wx.cloud.init(); Page({ data: { }, onLoad: async function () { console.log(this) const user = await getUserInfo(); console.log("onLoad user",user) const code = await login(); console.log("onLoad code",code); const res = await wx.cloud.database().collection('todos').where({ _openid: 'xxx' }).get(); console.log("onLoad res", res) }, onShow: async function(){ const user = await getUserInfo(); console.log("onshow", user) } })
2018-11-10 - 小程序不同页面的异步回调,callback和promise的使用讲解
发个扫盲贴,大神请绕道。最近好多同学问我如何再请求数据成功后直接使用数据。我们通常的做法就是在请求成功后,再调用我们定义的方法,进而使用数据。如下代码 [代码] onLoad() { let that=this wx.cloud.database().collection("users").get({ success(res) { that.setData(res.data) }, fail(res) { } }) }, showData(dataList) { //.........做数据处理 }, [代码] 我们这样写其实也没什么不对,但是如果数据请求和使用是在两个不同的页面呢。 比如我们在app.js里请求位置,获取用户信息。然后在首页index.js里要使用这些数据,那么我们这么写就有问题了。下面就来教大家两种方式来很好的解决这个问题。 一,通过callback回调。 先看下代码,然后我再具体给大家讲解下原理。 app.js里定义如下方法 [图片] 然后再index.js 里这么使用 [图片] 这时候,其实就可以看到了,我们在首页index.js里调用了app.js里的请求数据的方法,并且可以在index.js里直接使用数据。 原理讲解 原理其实很简单,就是我们在app.js里的获取数据的方法里定义一个参数。而这个参数和普通参数唯一不同的地方,就是这个参数是个function方法 [图片] 我们上图的callback参数,其实就是下图 function(result){} [图片] 把function方法作为一个参数传递进去的目的,就是为了下面的回调。 [图片] 我们这个callBack参数,可以在请求数据成功或者失败的时候作为一个方法调用。这样就可以把请求到的数据,回传回去了。 讲的有点绕,不知道大家有没有被绕晕。这在java开发中,其实就相当于监听者模式。说白了就是在一个页面里监听另外一个页面的动作,如获取数据成功,当监听到数据获取成功这个动作以后,就可以直接把数据回传回来了。 如果觉得这种方法有点绕,不好使用,我们就用下面的这个第二种方式。 二,promise promise的好处就是可以不用那个层层传递,不用那么绕。 还是先看代码,后面结合代码给大家讲下原理 app.js里定义如下方法 [图片] index.js里这么调用 [图片] 用句通俗的话说,就是通过promise让我们的数据请求和使用看上去是在同一个页面完成。怎么实现的呢 1,在app.js里把数据请求封装到promise里,然后把promise返回到我们的首页index.js里 2,在首页里使用这个promise 实现数据的获取和使用。 在具体些就是下面这几步 promise基础用法 [图片] 1、new 一个Promise对象 2、请求数据的异步代码写在promise的函数中 3、promise接受两个参数,一个resolve(已成功success),一个reject(已失败fail) 4、promise有三种状态pendding(进行中,当new了promise就是pendding的状态)、fulfilled(已成功)、rejected(已失败),当成功的时候调用resolve将状态改为已成功,当失败的时候调用reject将状态改为已失败,一旦状态发生改变之后,状态就凝固了,后面就无法改变状态了,成功会将成功的数据返回,失败会将失败的信息返回。 5、在需要获取数据的地方通过promise.then()的方式获取,这里面接受两个参数,都是匿名函数,第一个是接受成功的函数,第二个是失败时候的函数 [图片] 好了,到这里我们两种不同页面的异步回调就给大家将完了。代码就完整的给大家贴出来吧,方便大家日后使用 app.js [代码]//app.js App({ //第二种,通过promise promiseGetData() { let promise = new Promise(function(success, fail) { wx.cloud.database().collection("users").get({ success(res) { success(res) }, fail(res) { fail(res) } }) }) return promise; }, //第一种,通过callback的方式来实现回调 callBackGetData(callBack) { wx.cloud.database().collection("users").get({ success(res) { callBack(res) }, fail(res) { callBack(res) } }) }, }) [代码] index.js [代码]// 异步调用,callback const app = getApp() Page({ clickBtn() { //按钮点击 //callback方式 // app.callBackGetData(function(result) { // console.log("dataList", result) // }) //promise方法 let promise = app.promiseGetData() promise.then((res) => { //获取成功的结果,res中存着获取成功时的数据 console.log("成功", res) }, (error) => { // 获取数据失败时 console.log("失败", error) }) }, }) [代码]
2019-11-14 - wx.checkSession有效,但是解密数据失败
checksession成功后,获取用户信息传递到后端,解密却常常会失败,也就是说session_key过期了?
2019-10-30