微信小程序中使用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 相关文章推荐
jquery下onpropertychange事件的绑定方法
Aug 01 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
Feb 23 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
Aug 14 Javascript
基于jquery打造的百分比动态色彩条插件
Sep 19 Javascript
JS生成随机字符串的多种方法
Jun 10 Javascript
js实现下拉框选择要显示图片的方法
Feb 16 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
Mar 19 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
Jan 11 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
Oct 25 Javascript
Node.js+Express+Mysql 实现增删改查
Apr 03 Javascript
inquirer.js一个用户与命令行交互的工具详解
May 18 Javascript
vue-路由精讲 二级路由和三级路由的作用
Aug 06 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笔试题
2009/08/04 PHP
PHP 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
javascript静态的url如何传递
2007/05/03 Javascript
javascript 常用代码技巧大收集
2009/02/25 Javascript
js 自定义个性下拉选择框示例
2013/08/20 Javascript
JSON+HTML实现国家省市联动选择效果
2014/05/18 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
浅入深出Vue之组件使用
2019/07/11 Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
2019/10/23 jQuery
微信小程序开发摇一摇功能
2019/11/22 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
2019/11/24 Javascript
微信小程序实现锚点跳转
2020/11/23 Javascript
梯度下降法介绍及利用Python实现的方法示例
2017/07/12 Python
python的pdb调试命令的命令整理及实例
2017/07/12 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
英国女性时尚精品店:THE DRESSING ROOM
2018/05/23 全球购物
售后服务科岗位职责范文
2013/11/13 职场文书
《识字五》教学反思
2014/03/01 职场文书
大学生职业生涯规划书
2014/03/14 职场文书
十八大标语口号
2014/10/09 职场文书
怎样写辞职信
2015/02/27 职场文书
2015社区爱国卫生工作总结
2015/04/21 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
2015年企业员工工作总结范文
2015/05/21 职场文书
python 调用js的四种方式
2021/04/11 Python
python实现socket简单通信的示例代码
2021/04/13 Python
Python实现信息管理系统
2022/06/05 Python