⼩程序中使⽤Async-await⽅法异步请求变为同步请
求⽅法
⼩程序中有些 Api 是异步的,⽆法直接进⾏同步处理。例如:、、等。如果需要同步处理,可以使⽤如下⽅法:
注意:
Async-await⽅法属于ES7语法,在⼩程序开发⼯具中如果勾选es6转es5, 会报错:
ReferenceError: regeneratorRuntime is not defined
避免报错,可以引⼊
然后在使⽤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) => {
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()
})
}
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
List() // 请求数据
await api.hideLoading() // 等待请求数据成功后,隐藏loading
},
// 获取列表
getList () {
return new Promise((resolve, reject) => {
x: '',
y: ''
}).then((res) => {
this.setData({
await和async使用方法list: res
})
console.log(res)
resolve()
})
.catch((err) => {
<(err)
reject(err)
})
})
},
})
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论