我的小程序页面有两个 request,前一个发送到平台调用 钥 ,获取密钥之后该怎么将密钥反馈进下一个request 的header 里面作为输入的数据?
后一个 request 如何调用前一个 request数据的问题?How to call the data of the previous request in the next request?
后一个 request 如何调用前一个 request数据的问题?我的小程序页面有两个 request,前一个发送到平台调用 钥 ,获取密钥之后该怎么将密钥反馈进下一个request 的header 里面作为输入的数据?
My applet page has two requests. The first one is sent to the platform call key. After obtaining the key, how can I feed the key back into the header of the next request as input data?
回答:
前一个 request 的success 方法里面 写下一个request
重写wx.request,多加一个参数token,参数token为true时会获取缓存的token,缓存token不存在则会先请求获取token,再携带token请求业务接口
// utils/overWrite.jslet { request } = wxObject.defineProperty(wx, 'request', { async value(p){ if(p.token){ delete p.token // 从globalData或缓存中取token,这里以缓存为例 var token = wx.getStorageSync('x-auth-token') || '' if(!token){ // 不存在token,则请求获取token var res = await new Promise((rs, rj)=>{ request({ url:'这里填写你的token获取地址', success: res=>rs(res), faile: e=>rj(e), }) }) // 假设返回结果为{token:'xxxxxxxxxxxxx'} console.log(res) token = res.data.token || '' if(token){ // 存于globalData或缓存中,这里以缓存为例 wx.setStorageSync('x-auth-token', token) }else{ console.error('获取token失败') } } // 合并header p.header = Object.assign(p.header || {}, {'X-Auth-Token':token}) return request.call(this, p) } }})
在app.js头部引用overWrite.js
require('./utils/overWrite')App({ onLaunch: function () {}})
在页面中使用
// pages/index/index.jsPage({ onLoad: function () { // 普通请求,不需要token wx.request({ url: '你的业务接口地址' }) // 需要带token请求 wx.request({ token:!0, url: '你的业务接口地址' }) },})
若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人
小程序的请求都是异步的,无法通过属性设置为同步。所以你可以:
1、把第二个请求放到第一个请求的success里写。
2、通过封装callback回调方法的方式,把第二次请求放到第一次请求的回调中执行
3、通过引入Promise, async 以及 await的方式同步.