微信小程序中使用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 相关文章推荐
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
Mar 31 Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
Mar 29 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
Apr 05 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
Oct 26 Javascript
jQuery EasyUI菜单与按钮详解
Jul 13 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
Nov 10 Javascript
Bootstarp 基础教程之表单部分实例代码
Feb 03 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
Jul 24 Javascript
使用flow来规范javascript的变量类型
Sep 12 Javascript
0基础学习前端开发的一些建议
Jul 14 Javascript
vue 点击其他区域关闭自定义div操作
Jul 17 Javascript
关于angular引入ng-zorro的问题浅析
Sep 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
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
PHP使用OB缓存实现静态化功能示例
2019/03/23 PHP
Prototype源码浅析 String部分(一)之有关indexOf优化
2012/01/15 Javascript
用JQUERY增删元素的代码
2012/02/14 Javascript
浅析LigerUi开发中谨慎载入common.css文件
2013/07/09 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
又一枚精彩的弹幕效果jQuery实现
2016/07/25 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
js时间戳格式化成日期格式的多种方法介绍
2017/02/16 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
vue router自动判断左右翻页转场动画效果
2017/10/10 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
10行原生JS实现文字无缝滚动(超简单)
2018/01/02 Javascript
基于vue-resource jsonp跨域问题的解决方法
2018/02/03 Javascript
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
微信小程序实现组件顶端固定或底端固定效果(不随滚动而滚动)
2020/04/09 Javascript
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
python操作sqlite的CRUD实例分析
2015/05/08 Python
Python 文件处理注意事项总结
2017/04/10 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
keras中的卷积层&池化层的用法
2020/05/22 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
创立科技Java面试题
2015/11/29 面试题
幼儿园教师工作感言
2014/02/15 职场文书
慰问敬老院活动总结
2014/04/26 职场文书
市场营销战略计划书
2014/05/06 职场文书
批评与自我批评总结
2014/10/17 职场文书
奥巴马开学演讲观后感
2015/06/12 职场文书
私人贷款担保书该怎么写呢?
2019/07/02 职场文书
python实现剪贴板的操作
2021/07/01 Python
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers