微信小程序中使用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 相关文章推荐
分享一个自己写的table表格排序js插件(高效简洁)
Oct 29 Javascript
jquery 字符串切割函数substring的用法说明
Feb 11 Javascript
jquery遍历checkbox介绍
Feb 21 Javascript
javascript框架设计之种子模块
Jun 23 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
Nov 05 Javascript
深入学习AngularJS中数据的双向绑定机制
Mar 04 Javascript
Summernote实现图片上传功能的简单方法
Jul 11 Javascript
jQuery图片切换动画特效
Nov 02 Javascript
vue-router 学习快速入门
Mar 01 Javascript
jquery实现搜索框功能实例详解
Jul 23 jQuery
Angular服务Request异步请求的实例讲解
Aug 13 Javascript
详释JavaScript执行环境与执行栈
Apr 02 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编写一个简单的路由类
2011/04/13 PHP
PHP 透明水印生成代码
2012/08/27 PHP
Jquery练习之表单验证实现代码
2010/12/14 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
JavaScript中几个重要的属性(this、constructor、prototype)介绍
2013/05/19 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
Angularjs中数据绑定的实例详解
2017/08/25 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
解决前后端分离 vue+springboot 跨域 session+cookie失效问题
2019/05/13 Javascript
ES6小技巧之代替lodash
2019/06/07 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
微信小程序如何获取用户头像和昵称
2019/09/23 Javascript
Postman无法正常返回结果问题解决
2020/08/28 Javascript
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
python发送伪造的arp请求
2014/01/09 Python
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
Python实现按特定格式对文件进行读写的方法示例
2017/11/30 Python
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
Django框架模板用法入门教程
2019/11/04 Python
python如何实现单链表的反转
2020/02/10 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
python定时截屏实现
2020/11/02 Python
大学生就业意向书范文
2014/04/01 职场文书
实习介绍信范文
2015/05/05 职场文书
奖学金发言稿(范文)
2019/08/21 职场文书