微信小程序中使用Async-await方法异步请求变为同步请求方法


Posted in Javascript onMarch 28, 2019

微信小程序中有些 Api 是异步的,无法直接进行同步处理。例如:wx.request、wx.showToast、wx.showLoading等。如果需要同步处理,可以使用如下方法:

注意:

Async-await方法属于ES7语法,在小程序开发工具中如果勾选es6转es5, 会报错:

ReferenceError: regeneratorRuntime is not defined

避免报错,可以引入 regenerator

在根目录下创建 lib 文件夹,并将 https://github.com/facebook/regenerator/tree/master/packages 里面的 regenerator-runtime 文件夹放进去。

然后在使用async-awiat的页面中引入:

// pages/list/list.js

const regeneratorRuntime = require('../../lib/regenerator-runtime/runtime')

微信小程序中使用Async-await方法异步请求变为同步请求方法

同步处理异步请求

在根目录下新建api文件夹,里面新建index.js

// request get 请求
const getData = (url, param) => {
 return new Promise((resolve, reject) => {
 wx.request({
  url: url,
  method: 'GET',
  data: param,
  success (res) {
  console.log(res)
  resolve(res.data)
  },
  fail (err) {
  console.log(err)
  reject(err)
  }
 })
 })
}

// request post 请求
const postData = (url, param) => {
 return new Promise((resolve, reject) => {
 wx.request({
  url: url,
  method: 'POST',
  data: param,
  success (res) {
  console.log(res)
  resolve(res.data)
  },
  fail (err) {
  console.log(err)
  reject(err)
  }
 })
 })
}

// loading加载提示
const showLoading = () => {
 return new Promise((resolve, reject) => {
 wx.showLoading({
  title: '加载中...',
  mask: true,
  success (res) {
  console.log('显示loading')
  resolve(res)
  },
  fail (err) {
  reject(err)
  }
 })
 })
}

// 关闭loading
const hideLoading = () => {
 return new Promise((resolve) => {
 wx.hideLoading()
 console.log('隐藏loading')
 resolve()
 })
}

module.exports = {
 getData,
 postData,
 showLoading,
 hideLoading
}

在入口文件 app.js 中引入:

//app.js 
const api = require('./api/index')

App({
 onLaunch: function () {
 
 },
 // 全局数据中暴露api
 globalData: { 
 api
 }
})

在需要使用api 的页面中处理如下:

// pages/list/list.js
const app = getApp()

const api = app.globalData.api

Page({
 
 onLoad () {
 this.init()
 },

 // 初始化
 async init () {
 await api.showLoading() // 显示loading
 await this.getList() // 请求数据
 await api.hideLoading() // 等待请求数据成功后,隐藏loading
 },

 // 获取列表
 getList () {
 return new Promise((resolve, reject) => {
  api.getData('http://127.0.0.1:3000/list', {
   x: '',
   y: ''
  }).then((res) => {
  this.setData({
   list: res
  })
  console.log(res)
  resolve()
  })
  .catch((err) => {
   console.error(err)
   reject(err)
  })
 })
 },
 
})

参考:https://3water.com/article/158645.htm

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用cookies实现的可记忆的样式切换效果代码下载
Dec 24 Javascript
js性能优化 如何更快速加载你的JavaScript页面
Mar 17 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
Feb 22 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
Mar 01 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
Sep 02 Javascript
60行js代码实现俄罗斯方块
Mar 31 Javascript
第二章之Bootstrap 页面排版样式
Apr 25 Javascript
使用Web Uploader实现多文件上传
Jun 08 Javascript
JS实现的五级联动菜单效果完整实例
Feb 23 Javascript
canvas绘制多边形
Feb 24 Javascript
以v-model与promise两种方式实现vue弹窗组件
May 21 Javascript
JS Object构造函数之Object.freeze
Apr 28 Javascript
详解Js里的for…in和for…of的用法
Mar 28 #Javascript
ES7之Async/await的使用详解
Mar 28 #Javascript
详解vue-cli3多环境打包配置
Mar 28 #Javascript
微信小程序之onLaunch与onload异步问题详解
Mar 28 #Javascript
详解vue使用插槽分发内容slot的用法
Mar 28 #Javascript
详解一个基于套接字实现长连接的express
Mar 28 #Javascript
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
Mar 28 #Javascript
You might like
PHP使用feof()函数读文件的方法
2014/11/07 PHP
PHP常用工具类大全附全部代码下载
2015/12/07 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
javascript里的条件判断
2007/02/27 Javascript
javascript实现全角与半角字符的转换
2015/01/07 Javascript
BootStrap3学习笔记(一)之网格系统
2016/05/20 Javascript
jQuery 3.0十大新特性
2016/07/06 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
2017/02/18 Javascript
整理关于Bootstrap列表组的慕课笔记
2017/03/29 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
JS获取当前地理位置的方法
2017/10/25 Javascript
详解vue移动端项目代码拆分记录
2019/03/15 Javascript
Jquery 获取相同NAME 或者id删除行操作
2020/08/24 jQuery
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
基于Django实现日志记录报错信息
2019/12/17 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
2020/06/01 Python
python基于openpyxl生成excel文件
2020/12/23 Python
html5 canvas绘制放射性渐变色效果
2018/01/04 HTML / CSS
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
C#笔试题
2015/07/14 面试题
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
会计系个人求职信范文分享
2013/12/20 职场文书
办公室打字员岗位职责
2014/04/16 职场文书
建筑结构施工求职信
2014/07/11 职场文书
镇政府副镇长群众路线专题民主生活会对照检查材料
2014/09/19 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript