微信小程序中使用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 相关文章推荐
更正确的asp冒泡排序
May 24 Javascript
JQuery Study Notes 学习笔记(一)
Aug 04 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
May 17 Javascript
JavaScript中的undefined学习总结
Nov 30 Javascript
jquery实现的树形目录实例
Jun 26 Javascript
AngularJS实现全选反选功能
Dec 08 Javascript
详解Angular开发中的登陆与身份验证
Jul 27 Javascript
bootstrap table配置参数例子
Jan 05 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
Jun 29 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
Jan 07 Javascript
微信小程序时间戳转日期的详解
Apr 30 Javascript
Vue3 中的数据侦测的实现
Oct 09 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
合作指挥官:孟斯克
2020/03/16 星际争霸
dede3.1分页文字采集过滤规则详说(图文教程)续二
2007/04/03 PHP
如何使用php绘制在图片上的正余弦曲线
2013/06/08 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
windows7下php开发环境搭建图文教程
2015/01/06 PHP
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
cookie在javascript中的使用技巧以及隐私在服务器端的设置
2012/12/03 Javascript
如何使用jquery动态加载js,css文件实现代码
2013/04/03 Javascript
JavaScript页面模板库handlebars的简单用法
2015/03/02 Javascript
js实现多图左右切换功能
2016/08/04 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
教你安装python Django(图文)
2013/11/04 Python
详解python开发环境搭建
2016/12/16 Python
python求加权平均值的实例(附纯python写法)
2019/08/22 Python
Django多进程滚动日志问题解决方案
2019/12/17 Python
3种python调用其他脚本的方法
2020/01/06 Python
Python的in,is和id函数代码实例
2020/04/18 Python
Python 数据分析之逐块读取文本的实现
2020/12/14 Python
html5中localStorage本地存储的简单使用
2017/06/16 HTML / CSS
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
卡拉威高尔夫官方网站:Callaway Golf
2020/09/16 全球购物
成都思必达公司C#程序员招聘面试题
2013/06/26 面试题
优秀村官事迹材料
2014/01/10 职场文书
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
股指期货心得体会
2014/09/10 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
雷锋电影观后感
2015/06/10 职场文书
java项目构建Gradle的使用教程
2022/03/24 Java/Android
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang