微信小程序中使用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中serialize()用法实例分析
Feb 06 Javascript
javascript中的3种继承实现方法
Jan 27 Javascript
微信小程序 wxapp导航 navigator详解
Oct 31 Javascript
以v-model与promise两种方式实现vue弹窗组件
May 21 Javascript
Vue实现一个无限加载列表功能
Nov 13 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
Dec 04 jQuery
Web安全之XSS攻击与防御小结
Dec 13 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
Apr 15 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
Aug 19 Javascript
JavaScript实现打字游戏
Feb 19 Javascript
Ajax实现局部刷新的方法实例
Mar 31 Javascript
Javascript webpack动态import
Apr 19 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
风格模板初级不完全修改教程
2006/10/09 PHP
php中日期加减法运算实现代码
2011/12/08 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
详解Javascript 装载和执行
2014/11/17 Javascript
JS原型对象的创建方法详解
2016/06/16 Javascript
浅析JavaScript中的array数组类型系统
2016/07/18 Javascript
AngularJS下对数组的对比分析
2016/08/24 Javascript
AngularJS中run方法的巧妙运用
2017/01/04 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
2017/05/17 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
D3.js实现简洁实用的动态仪表盘的示例
2018/04/04 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
Django中的CACHE_BACKEND参数和站点级Cache设置
2015/07/23 Python
实例Python处理XML文件的方法
2015/08/31 Python
Python之list对应元素求和的方法
2018/06/28 Python
使用python自动追踪你的快递(物流推送邮箱)
2020/03/17 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
Python用SSH连接到网络设备
2021/02/18 Python
纯css3制作煽动翅膀的蝴蝶的示例
2018/04/23 HTML / CSS
世界上最大的糖果店:Dylan’s Candy Bar
2017/11/07 全球购物
Bluebella法国官网:英国性感内衣品牌
2019/05/03 全球购物
绩效管理实施方案
2014/03/19 职场文书
签约仪式策划方案
2014/06/02 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
硕士学位论文评语
2014/12/31 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书
初三语文教学反思
2016/03/03 职场文书