V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
TangYuSen
V2EX  ›  微信

写微信小程序遇到的问题,帮忙看看

  •  
  •   TangYuSen · 2019-11-07 23:40:18 +08:00 · 2343 次点击
    这是一个创建于 1871 天前的主题,其中的信息可能已经有所发展或是发生改变。

    思路是这样的,有一个请求基类,req(options),一开始先

    let token = wx.getStorageSync('token')
    

    获取本地缓存的 token,然后 if(token)本地存在 token 的话即开始发送请求,else 进入拿 token,放入缓存的模块,放完再自己调用自己,我在请求的 success 里判断返回 200 才 resolve,但不知道为什么第一次不存在 token,重新获取 token 后自己调用自己,在 resolve 前面 console.log()拿到的数据,在控制台打印出了拿到的值,但就是 resolve()出去,在 then 里拿不到值

    myImage.png

    stillyu
        1
    stillyu  
       2019-11-07 23:53:43 +08:00 via iPhone
    上代码吧
    remon
        2
    remon  
       2019-11-07 23:55:42 +08:00 via Android
    代码不全,看代码加上猜测,你应该进不到 then 里面才对。外面拿到的 promise 是第一次调用的,第二次调用的 promise 在 else 里面就丢弃了
    dcalsky
        3
    dcalsky  
       2019-11-08 00:00:04 +08:00
    ![Screen Shot 2019-11-07 at 11.59.00 PM.png]( https://i.loli.net/2019/11/07/oEwiyvcLWC2jdlP.png)

    加个 resolve 在 else block 里就行了。
    ayase252
        4
    ayase252  
       2019-11-08 00:03:46 +08:00
    你是想
    ```
    req(...args).then((val) => {})
    ```
    val 里面取到值?仔细观察你拿到的是第一次 req 返回的 Promise。如果进了 else,由于你没有返回值,执行完相当于用 undefine resolve。

    要拿到第二次的 Promise,返回你画黄色框的语句就行了,`return req(option)`
    ayase252
        5
    ayase252  
       2019-11-08 00:08:06 +08:00
    @ayase252 不对,用外层的 resolve,来从`req(option).then()`里面拿值....很不优雅的样子
    TangYuSen
        6
    TangYuSen  
    OP
       2019-11-08 00:39:57 +08:00
    @ayase252 对,就是你这样的思路,再 val 里取到值后再对数据处理后渲染,刚试了一下 return req(options),还是拿不到值,这样写很不优雅吗,我再 github 参考了别人的封装方法的
    TangYuSen
        7
    TangYuSen  
    OP
       2019-11-08 00:41:27 +08:00
    @dcalsky 感谢!!!超级感谢!!!按你说的,就可以了!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2570 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:37 · PVG 14:37 · LAX 22:37 · JFK 01:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.