小程序async(小程序async写法)
华为云服务器特价优惠火热进行中! 2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。
合作流程: |
本篇文章给大家谈谈小程序async,以及小程序async写法对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
微信号:cloud7591如需了解更多,欢迎添加客服微信咨询。
复制微信号
本文目录一览:
- 1、微信小程序 使用 Async await 异步转同步请求
- 2、小程序里面的锁的代码
- 3、小程序中使用async
- 4、微信小程序退出账号怎么实现
- 5、微信小程序api怎么promise化
- 6、微信小程序使用npm安装regenerator-runtime,以支持async、await
微信小程序 使用 Async await 异步转同步请求
async await方法属于ES7语法,在小程序开发工具中如果勾选es6转es5, 会报错:
避免报错,可以引入 regenerator

小程序里面的锁的代码
针对小程序的异步
因为懒得去配置async 和await的环境了,wx.getStorageSync是同步的就
直接了在这个基础上了一个重入锁的js来实现同步
/***本类主要用来实现同步*/
const lockerKey = "wxlocker";
var lockerContainer={};
/**
* 加锁函数
* 参数:锁名
*
*/
function lock(lockName){
var obj= wx.getStorageSync(lockerKey);
console.log(111);
console.log(obj);
if (typeof obj === "undefined" || obj==null||obj==''){
lockerContainer.lockName = 1;
wx.setStorageSync(lockerKey, lockerContainer);
}else{
lockerContainer = obj;
if (typeof lockerContainer.lockName !== "undefined" lockerContainer.lockName != null lockerContainer.lockName != ''){
lockerContainer.lockName = lockerContainer.lockName +1;
}else{
lockerContainer.lockName = 1;
}
//更新锁
wx.setStorageSync(lockerKey, lockerContainer);
}
}
/**
* 解锁函数
* 参数:锁名
*
*/
function unlock(lockName){
var obj = wx.getStorageSync(lockerKey);
console.log(222);
console.log(obj);
if (typeof obj === "undefined" || obj == null || obj == '') {//没有锁过
return;
} else {
lockerContainer = obj;
if (typeof lockerContainer.lockName !== "undefined" lockerContainer.lockName != null lockerContainer.lockName != '') {
if (lockerContainer.lockName =0){
lockerContainer.lockName=0;
return;
}else{
lockerContainer.lockName = lockerContainer.lockName - 1;
}
} else {
return;
}
//更新锁
wx.setStorageSync(lockerKey, lockerContainer);
obj = wx.getStorageSync(lockerKey);
console.log(obj);
}
}
/**
* 是否被锁函数
* 参数:锁名
* 返回值:boolean
*/
function isLockedBy(lockName){
var obj = wx.getStorageSync(lockerKey);
if (typeof obj === "undefined" || obj == null || obj == '') {//没有锁过
return false;
} else {
lockerContainer = obj;
if (typeof lockerContainer.lockName !== "undefined" lockerContainer.lockName != null lockerContainer.lockName != '') {
if (lockerContainer.lockName 0) {
return true;
} else {
return false;
}
} else {
return false;
}
}
}
/**
* 等待函数(等待100*millseconds后自动解除)
* 参数:锁名,间隔毫秒,等待解锁完成后的回调函数
*
*/
function wait(lockName, millseconds,callback){
//100次监控后清空锁
var expireTime = 0;
var timer =setInterval(function () {
console.log("wait " + millseconds);
if (!isLockedBy(lockName)){
clearInterval(timer);
callback();
}else{//被锁住了
expireTime++;
if (expireTime 100) {
lockerContainer.lockName=null;
//清空锁
wx.setStorageSync(lockerKey, lockerContainer);
clearInterval(timer);
}
}
}, millseconds)
}
module.exports = {
wait: wait,
unlock: unlock,
lock: lock
}
用法,加锁多少次就要解锁多少次
lock("mylock")
lock("mylock")
unlock("mylock")
unlock("mylock")
wait("mylock",1000,callback)
小程序中使用async
在小程序开发时,我们请求数据,就需要使用promise或者async处理异步请求,避免掉入回调地狱。而async号称是解决回调地狱的最终方案,平时我也是比较喜欢使用的,但是作为es7的语法,小程序的开发者工具貌似不支持es7
那么要如何让开发工具支持呢?
(注:不可全局引入,否则无效)
该方法存在兼容性,若要适配某些旧的手机或者小程序时,请勿使用本方法
2.使用promise处理异步
3.使用async
微信小程序退出账号怎么实现
微信小程序退出账号的前提条件是用户已登陆,且在前端页面和后端服务已记录了用户的登陆状态。退出登陆的操作,相当于清除用户登陆状态的操作。
因此微信小程序实现退出账号的具体流程包括以下几点:
1、用户登陆操作:
(1)微信小程序调用wx.login获取登录凭证(code)。
(2) 将code传递到后端服务,通过凭证进而换取用户登录态信息,包括用户的唯一标识(openid),并生成与用户一一对应的token值,保存起来,用作用户身份的校验,同时返回给微信小程序客户端。
(3)微信小程序获取到token令牌,保存到本地,即可作为已登陆状态的凭证。
前端代码为:
const login = function () {
wx.showLoading({ title: '登陆中' })
wx.login().then(res = {
if (res.errMsg === 'login:ok') {
Api.login(res.code).then(data = {
wx.hideLoading()
wx.setStorageSync('token', data) })
}})}
后端服务代码为:
async login(jsCode) {
const { ctx, app } = this;
const APPID = app.config.miniProgram.appId;
const SECRET = app.config.miniProgram.appSecret;
const url = `{APPID}secret=${SECRET}js_code=${jsCode}grant_type=authorization_code`;
const res = await ctx.curl(url, { method: 'GET', dataType: 'json' });
const openid = res.data.openid;
const session_key = res.data.session_key;
const str = await app.redis.get(openid);
if (str JSON.parse(str).accessToken) { // 已登陆
const oldAccessToken = JSON.parse(str).accessToken;
await app.redis.del(oldAccessToken); // 删除token,实现单点登陆
await app.redis.del(openid);}
const accessToken = await ctx.helper.createWxToken(openid, session_key); // 生成新的token
return accessToken;}
2、退出登陆操作:
(1)点击“退出账号”按钮,调用ajax请求后端退出登陆接口并传递用户token,若退出成功,则清除当前用户登陆状态和token信息。
(2)刷新当前页面数据,清除页面上的用户信息。
(3)后端API接收到客户端传递的用户token,查询数据库判断用户是否已登陆,若登陆,则删除或将token置为无效。
前端代码为:
const logout = function () {
wx.showLoading({ title: '退出登陆中' })
const token = wx.getStorageSync('token')
Api.logout({ token: token }).then(data = {
wx.hideLoading()
wx.removeStorageSync('token')
refreshPageData()
})}
后端代码为:
async logout(accessToken) {
const { ctx, app } = this;
const userId = await app.redis.get(accessToken);
if (!userId) ctx.throw(400, '登陆状态已失效');
await app.redis.del(userId); // 删除userId
await app.redis.del(accessToken); // 删除token
}
扩展资料:
1、微信小程序账号密码登陆和授权登陆后,token保存在loacalStore中,在每次加载接口时,携带上token令牌,向服务端传递已登陆的状态。
2、微信小程序退出登陆需清除登陆状态,当调用微信小程序API中的wx.login()执行登陆操作,通过登陆接口获取到code后需调用后端接口生成token, 由于安全问题,勿在前端使用密钥生成。在执行退出登陆操作时,需清除localStorage 中缓存的token及用户信息,并刷新当前页面数据。
微信小程序api怎么promise化
默认情况下,小程序官方提供的异步API都是基于回调函数实现的,这样就容易造成回调地狱的问题,代码的可读性、维护性差。API Promise化,指的是通过额外的配置,将官方提供的、基于回调函数的异步 API,升级改造为基于 Promise 的异步 API,从而提高代码的可读性、维护性,避免回调地狱的问题。实现API Promise化主要依赖于miniprogram-api-promise这个第三方的 npm 包。首先需要确认已经正确安装了node,使用的开发工具为微信官方的微信开发者工具。
在项目文件夹下对项目进行初始化,执行npm init -y 此时项目文件夹下会创建package.json文件。
执行npm i --save miniprogram-api-promise安装第三方包。此时会在项目根目录下创建node_modules文件夹。
选择 工具--构建npm 等待构建完成点击确定,此时会创建miniprogram_npm文件夹。
在入口文件app.js中按需引入。
import {promisifyAll} from "miniprogram-api-promise"
const wxp=wx.p={}
promisifyAll(wx,wxp)
然后就可以通过wx.p来调用promise化的api。举个例子在test.js文件中
async getTestData(){
const {data:res}=await wx.p.request({methods:'GET',url: '', })
微信小程序使用npm安装regenerator-runtime,以支持async、await
1.在小程序根目录用npm init命令生成package.json文件
2.安装依赖:npm i regenerator-runtime -S; 注意:-S表示装在dependencies依赖下面,后续步骤中,小程序npm构建是读dependencies字段的;
在需要使用async、await关键字的地方引入regenerator-runtime
小程序async的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于小程序async写法、小程序async的信息别忘了在本站进行查找喔。
