微信小程序中使用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:以前写的xmlhttp池,代码
May 18 Javascript
javascript jQuery $.post $.ajax用法
Jul 09 Javascript
JS实现两个大数(整数)相乘
Apr 28 Javascript
使用Jquery获取带特殊符号的ID 标签的方法
Apr 30 Javascript
javascript搜索框点击文字消失失焦时文本出现
Sep 18 Javascript
JavaScript操作Cookie详解
Feb 28 Javascript
javascript制作2048游戏
Mar 30 Javascript
javascript实现添加附件功能的方法
Nov 18 Javascript
vue如何在自定义组件中使用v-model
May 14 Javascript
vue项目中实现的微信分享功能示例
Jan 21 Javascript
微信小程序实现聊天室功能
Jun 14 Javascript
详解Vue router路由
Nov 20 Vue.js
详解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
cmd下运行php脚本
2008/11/25 PHP
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
PHP的APC模块实现上传进度条
2015/10/27 PHP
PHP函数import_request_variables()用法分析
2016/04/02 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
Javascript 自定义类型方法小结
2010/03/02 Javascript
Javascript学习笔记-详解in运算符
2011/09/13 Javascript
JavaScript字符串String和Array操作的有趣方法
2012/12/18 Javascript
jQuery动画特效实例教程
2014/08/29 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
2017/07/11 Javascript
详解react关于事件绑定this的四种方式
2018/03/09 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
Koa从零搭建到Api实现项目的搭建方法
2019/07/30 Javascript
netbeans7安装python插件的方法图解
2013/12/24 Python
一则python3的简单爬虫代码
2014/05/26 Python
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
详解python之协程gevent模块
2018/06/14 Python
Python实现代码块儿折叠
2020/04/15 Python
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
专科毕业生求职简历的自我评价
2013/10/12 职场文书
会计学财务管理专业个人的自我评价
2013/10/19 职场文书
前台文员岗位职责及工作流程
2013/11/19 职场文书
市场推广策划方案
2014/06/02 职场文书
销售团队口号大全
2014/06/06 职场文书
我的中国梦演讲稿400字
2014/08/19 职场文书
会计稽核岗位职责
2015/04/13 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书