V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
node
V2EX  ›  JavaScript

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

  •  
  •   node · 2016-12-26 11:50:24 +08:00 · 5974 次点击
    这是一个创建于 2649 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    9 条回复    2016-12-26 18:21:42 +08:00
    linxl
        1
    linxl  
       2016-12-26 14:26:32 +08:00
    有 debug 模式可以.
    2zH
        2
    2zH  
       2016-12-26 15:00:19 +08:00
    wx.config 的 debug 设置为 true ,执行后无论成功或失败都会有一个带提示信息的 alert
    jimliang
        3
    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
        4
    2zH  
       2016-12-26 16:54:15 +08:00
    抱歉……没看仔细
    node
        5
    node  
    OP
       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
        6
    jimliang  
       2016-12-26 17:11:16 +08:00   ❤️ 1
    @node 我这个用在正式环境很久了,哪个先调先执行哪个, ready 是每次调用都会执行
    node
        7
    node  
    OP
       2016-12-26 17:33:14 +08:00
    @jimliang
    明白了,谢谢啊!还有就是想问一下刚才提到的 async 两次调用同一个 callback 会报错,这个的话该怎么办呢?
    jimliang
        8
    jimliang  
       2016-12-26 17:54:48 +08:00   ❤️ 1
    @node Promise 的状态是一次性的,一旦 resolve 或者 reject 后,再次调用就无效了。
    node
        9
    node  
    OP
       2016-12-26 18:21:42 +08:00
    @jimliang
    promise 我倒没试过这种情况,但 async 的确会报错的,因为参数的引用还是在的。我现在整个结构已经是 async 的了,改成 promise 估计不太行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2908 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 00:30 · PVG 08:30 · LAX 17:30 · JFK 20:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.