收藏
回答

后一个 request 如何调用前一个 request数据的问题?

我的小程序页面有两个 request,前一个发送到平台调用 钥 ,获取密钥之后该怎么将密钥反馈进下一个request 的header 里面作为输入的数据?


回答关注问题邀请回答
收藏

3 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2020-08-06

    重写wx.request,多加一个参数token,参数token为true时会获取缓存的token,缓存token不存在则会先请求获取token,再携带token请求业务接口

    // utils/overWrite.js
    let { request } = wx
    Object.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获取地址',
                successres=>rs(res),
                failee=>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({
      onLaunchfunction () {}
    })
    


    在页面中使用

    // pages/index/index.js
    Page({
      onLoad: function () {
            // 普通请求,不需要token
        wx.request({
          url'你的业务接口地址'
        })
    
            // 需要带token请求
        wx.request({
          token:!0,
          url'你的业务接口地址'
        })
      },
    })
    

    若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人

    2020-08-06
    有用 2
    回复 4
    • 谢伟东
      谢伟东
      2020-08-07
      谢谢你能 在百忙中抽时间 回答 但是装上去  没响应,我改了一下还是不太行呢
      2020-08-07
      回复
    • 谢伟东
      谢伟东
      2020-08-07
      2020-08-07
      回复
    • 谢伟东
      谢伟东
      2020-08-07
      前一个的前段不知道为什么被吞了,重新发出来了
      2020-08-07
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2020-08-08回复谢伟东
      你可以写个代码片段
       [ 能复现问题的简单的 ] 代码片段
      https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html
      2020-08-08
      回复
  • 宋佳耀
    宋佳耀
    2020-08-06

    小程序的请求都是异步的,无法通过属性设置为同步。所以你可以:

    1、把第二个请求放到第一个请求的success里写。

    2、通过封装callback回调方法的方式,把第二次请求放到第一次请求的回调中执行

    3、通过引入Promise, async 以及 await的方式同步.

    2020-08-06
    有用 1
    回复
  • จุ๊บ
    จุ๊บ
    2020-08-06

    前一个 request 的success 方法里面 写下一个request

    2020-08-06
    有用 1
    回复
登录 后发表内容