微信 wx.config 如何判断是否成功

2016-12-26 11:50:24 +08:00
 node

微信 js-sdk 文档里写 wx.config 配置完成后的回调函数可以用 wx.ready 和 wx.error 传入,但好像 wx.ready 传入的回调无论成不成功都会被调用,也就是说如果失败的话 wx.error 传入的函数和 wx.ready 传入的函数都会被执行一遍。那这样的话想只在成功后才执行的回调函数该放在哪儿呢?

6009 次点击
所在节点    JavaScript
9 条回复
linxl
2016-12-26 14:26:32 +08:00
有 debug 模式可以.
2zH
2016-12-26 15:00:19 +08:00
wx.config 的 debug 设置为 true ,执行后无论成功或失败都会有一个带提示信息的 alert
jimliang
2016-12-26 16:32:37 +08:00
可以用一个 Promise 来保存状态,这样有两个好处, 一, Promise 来处理异步 二, Promise.state 状态唯一不可修改
```
var p
function checkWx() {
return p || (p = new Promise((resolve, reject) => {
if (!navigator.userAgent.match(/micromessenger\/(\d+\.\d+\.\d+)/i)) {
return reject(new Error())
}
wx.error(res => reject(new Error(res.errMsg)));
// ready 放在后面,好像无论如何 ready 都会执行
wx.ready(() => resolve(wx));
}))
}
```
2zH
2016-12-26 16:54:15 +08:00
抱歉……没看仔细
node
2016-12-26 16:54:49 +08:00
@jimliang
坑爹的是它好像是先执行 ready 的,再执行 error 的,这样的话 resolve 先于 reject 执行了, reject 还会起作用吗?另外的话就是我现在是用 async 的时候碰到了这个问题, async 同一个 callback 不能调用两次,这样的话有解吗?

@linxl @2zH
debug 模式能解决这个问题吗?我是想做到
wx.config(...);
成功: successCallback();
失败: failCallback();
像这样的, debug 模式能实现?
jimliang
2016-12-26 17:11:16 +08:00
@node 我这个用在正式环境很久了,哪个先调先执行哪个, ready 是每次调用都会执行
node
2016-12-26 17:33:14 +08:00
@jimliang
明白了,谢谢啊!还有就是想问一下刚才提到的 async 两次调用同一个 callback 会报错,这个的话该怎么办呢?
jimliang
2016-12-26 17:54:48 +08:00
@node Promise 的状态是一次性的,一旦 resolve 或者 reject 后,再次调用就无效了。
node
2016-12-26 18:21:42 +08:00
@jimliang
promise 我倒没试过这种情况,但 async 的确会报错的,因为参数的引用还是在的。我现在整个结构已经是 async 的了,改成 promise 估计不太行

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

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

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

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

© 2021 V2EX