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

2019-11-07 23:40:18 +08:00
 TangYuSen

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

let token = wx.getStorageSync('token')

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

2319 次点击
所在节点    微信
7 条回复
stillyu
2019-11-07 23:53:43 +08:00
上代码吧
remon
2019-11-07 23:55:42 +08:00
代码不全,看代码加上猜测,你应该进不到 then 里面才对。外面拿到的 promise 是第一次调用的,第二次调用的 promise 在 else 里面就丢弃了
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
2019-11-08 00:03:46 +08:00
你是想
```
req(...args).then((val) => {})
```
val 里面取到值?仔细观察你拿到的是第一次 req 返回的 Promise。如果进了 else,由于你没有返回值,执行完相当于用 undefine resolve。

要拿到第二次的 Promise,返回你画黄色框的语句就行了,`return req(option)`
ayase252
2019-11-08 00:08:06 +08:00
@ayase252 不对,用外层的 resolve,来从`req(option).then()`里面拿值....很不优雅的样子
TangYuSen
2019-11-08 00:39:57 +08:00
@ayase252 对,就是你这样的思路,再 val 里取到值后再对数据处理后渲染,刚试了一下 return req(options),还是拿不到值,这样写很不优雅吗,我再 github 参考了别人的封装方法的
TangYuSen
2019-11-08 00:41:27 +08:00
@dcalsky 感谢!!!超级感谢!!!按你说的,就可以了!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/617412

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX