微信小程序中使用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 相关文章推荐
javascript 面向对象全新理练之数据的封装
Dec 03 Javascript
jtable列中自定义button示例代码
Nov 21 Javascript
javascript中offset、client、scroll的属性总结
Aug 13 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖放商品放置购物车
Nov 30 Javascript
js仿百度登录页实现拖动窗口效果
Mar 11 Javascript
再谈javascript注入 黑客必备!
Sep 14 Javascript
基于JS实现的随机数字抽签实例
Dec 08 Javascript
探究react-native 源码的图片缓存问题
Aug 24 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
Aug 24 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
May 14 Javascript
js简单的分页器插件代码实例
Sep 11 Javascript
EXTJS7实现点击拖拉选择文本
Dec 17 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
thinkphp修改配置进入默认首页的方法
2017/02/07 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
详解PHP实现支付宝小程序用户授权的工具类
2018/12/25 PHP
javascript new fun的执行过程
2010/08/05 Javascript
js之ActiveX控件使用说明 new ActiveXObject()
2014/03/03 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
浅谈js中几种实用的跨域方法原理详解
2016/12/02 Javascript
JavaScript实现三级联动菜单效果
2017/08/16 Javascript
判断“命令按钮”是否被鼠标单击详解
2019/07/31 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
python修改注册表终止360进程实例
2014/10/13 Python
用Python进行基础的函数式编程的教程
2015/03/31 Python
Python扫描IP段查看指定端口是否开放的方法
2015/06/09 Python
python各种语言间时间的转化实现代码
2016/03/23 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
Python生成随机数组的方法小结
2017/04/15 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
基于python实现雪花算法过程详解
2019/11/16 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
2020/02/12 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
浅谈CSS3 动画卡顿解决方案
2019/01/02 HTML / CSS
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
给酒店员工的表扬信
2014/01/11 职场文书
《颐和园》教学反思
2014/02/26 职场文书
大宝sod蜜广告词
2014/03/21 职场文书
人民调解员培训方案
2014/06/05 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
复兴之路展览观后感
2015/06/02 职场文书
如何书写邀请函?
2019/06/24 职场文书