微信小程序中使用Async-await方法异步请求变为同步请求方法

 更新时间:2019年03月28日 15:10:30   作者:Mr.曹  
这篇文章主要介绍了微信小程序中使用Async-await方法异步请求变为同步请求方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

微信小程序中有些 Api 是异步的,无法直接进行同步处理。例如:wx.requestwx.showToastwx.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')


同步处理异步请求

在根目录下新建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://www.jb51.net/article/158645.htm

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • javascript动画效果打开/关闭层

    javascript动画效果打开/关闭层

    用javascript实现打开层和关闭层的效果,原理不错,学习,记录好
    2008-06-06
  • Array, Array Constructor, for in loop, typeof, instanceOf

    Array, Array Constructor, for in loop, typeof, instanceOf

    虽然在 JavaScript 中数组是是对象,但是没有好的理由去使用 `for in` 循环 遍历数组。相反,有一些好的理由不去使用 for in 遍历数组。
    2011-09-09
  • webpack优化之代码分割与公共代码提取详解

    webpack优化之代码分割与公共代码提取详解

    这篇文章主要给大家介绍了关于webpack优化之代码分割与公共代码提取的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用webpack具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • 小程序最新获取用户昵称和头像的方法总结

    小程序最新获取用户昵称和头像的方法总结

    这篇文章主要介绍了小程序最新获取用户昵称和头像的方法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • layui实现tab的添加拒绝重复的方法

    layui实现tab的添加拒绝重复的方法

    今天小编就为大家分享一篇layui实现tab的添加拒绝重复的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • Javasipt:操作radio标签详解

    Javasipt:操作radio标签详解

    本篇文章主要介绍了Javasipt:操作radio标签。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • javascript实现可键盘控制的抽奖系统

    javascript实现可键盘控制的抽奖系统

    这篇文章主要为大家详细介绍了javascript实现可键盘控制的抽奖系统的相关资料,需要的朋友可以参考下
    2016-03-03
  • JavaScript实现文件下载并重命名代码实例

    JavaScript实现文件下载并重命名代码实例

    这篇文章主要介绍了JavaScript实现文件下载并重命名代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 在layui下对元素进行事件绑定的实例

    在layui下对元素进行事件绑定的实例

    今天小编就为大家分享一篇在layui下对元素进行事件绑定的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • JavaScript链式调用实例浅析

    JavaScript链式调用实例浅析

    这篇文章主要介绍了JavaScript链式调用,结合实例形式分析了javascript链式调用的相关原理、实现方法及操作注意事项,需要的朋友可以参考下
    2018-12-12

最新评论