赞
踩
小程序页面初始化时,需要去服务端获取token,所带参数在另外两个接口请求中,所写代码可能是这样子的:
onLoad(options) { this.getToken() }, getToken() { wx.request({ url: '后端API地址1', success: (res) => { // console.log(res) wx.request({ url: '后端API地址2', success: (data) => { // console.log(data) wx.request({ url: '后端API地址3', success: (r) => { console.log(r) } }) } }) } }) },
回调函数里面嵌套回调函数,这就是传说中的回调地狱。可读性非常差,维护起来可能要哭。怎么办?Promise化。
request.js相关代码
const baseUrl = 'https://www.escook.cn/api' const sendRequest = (params) => { // console.log(params) return new Promise((resolve, reject) => { wx.request({ url: baseUrl + params.url, method: params.method || 'GET', data: params.data, success: res => { // console.log(res) resolve(res) }, fail: err => { reject(err) } }) }) } export default sendRequest
home.js相关代码
import sendRequest from "../../utils/request" Page({ getData() { sendRequest({ method: 'POST', url: '/post', data: {name: 'buddha', age: 18} }).then(res => { console.log(res) }).catch(err => { console.log(err) }) }, onLoad(options) { this.getData() }, /**省略其它代码*/ })
home.js相关代码也可以优化成如下
import sendRequest from "../../utils/request"
Page({
async getData() {
const res = await sendRequest({
method: 'POST',
url: '/post',
data: {name: 'buddha', age: 18}
})
console.log(res)
},
onLoad(options) {
this.getData()
},
})
鼠标右键点击在外部终端窗口中打开
终端中执行npm init -y
和npm i --save miniprogram-api-promise
点击微信开发者工具中的工具菜单下的构建npm选项
构建完成后会跳出完成构建的弹框,点击确定即可
小程序miniprogram_npm目录下就会多出来一个miniprogram-api-promise目录,说明构建成功了
app.js相关代码是
import { promisifyAll } from 'miniprogram-api-promise'
const wxp = wx.p = {}
promisifyAll(wx, wx.p)
home.js相关代码是
async getData() {
const res = await wx.p.request({
'url': 'https://www.escook.cn/api/get',
'method' : 'GET',
'data': {name: 'buddha', age: 18}
})
console.log(res)
},
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。