小程序async(小程序async写法)

华为云服务器特价优惠火热进行中!

2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。

合作流程:
1、点击链接注册/关联华为云账号:点击跳转
2、添加客服微信号:cloud7591,确定产品方案、价格方案、服务支持方案等;
3、客服协助购买,并拉微信技术服务群,享受一对一免费技术支持服务;
技术专家在金蝶、华为、腾讯原厂有多年工作经验,并已从事云计算服务8年,可对域名、备案、网站搭建、系统部署、AI人工智能、云资源规划等上云常见问题提供更专业靠谱的服务,对相应产品提供更优惠的报价和方案,欢迎咨询。

本篇文章给大家谈谈小程序async,以及小程序async写法对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

微信号:cloud7591
如需了解更多,欢迎添加客服微信咨询。
复制微信号

本文目录一览:

微信小程序 使用 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的信息别忘了在本站进行查找喔。

发布于 2023-03-16 00:03:31
收藏
分享
海报
64
目录

    忘记密码?

    图形验证码

    复制成功
    微信号: cloud7591
    如需了解更多,欢迎添加客服微信咨询。
    我知道了