关于微信分享中的wx.ready()

我调用微信jssdk中的wx.config过后,发现无论config成功或者失败,wx.ready都会被触发。如下代码:

  wx.config({
    debug,
    appId: data.appId,
    timestamp: data.timestamp,
    nonceStr: data.nonceStr,
    signature: data.signature,
    jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage']
  });
  wx.ready(() => {
    console.log('wx ready')
  });
  wx.error(function(res){
    console.log('err', res)
  });

如果config失败,会先进wx.error打出错误信息,又进了wx.ready中打出wx ready的信息。

文档中写的是:

步骤四:通过ready接口处理成功验证
wx.ready(function(){

// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函> 数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。

});

但这样看来是否ready并不是处理成功验证,而是只要验证结束便会进入此函数?有没有可以处理成功验证的接口或者办法?

阅读 53k
2 个回答
新手上路,请多包涵

按微信的做法 wx.ready 无论成功还是失败都执行,此方法相当于 Promise 的 finally 方法,
而 wx.error 在捕获到异常时都会执行一次,那么应当可以把 wx.error 套在 wx.ready 内执行。

经过测试:

  1. 第一次 config 异步到 ready,error 在 ready 内同步执行;
  2. 第二次以后 config 都是同步到 ready,error 在 ready 内都是同步执行。

整理顺序可以写成:

const wxSdkAuth = async function (data, apis = []) {
  try {
    // 鉴权步骤
    await new Promise((resolve, reject) => {
      wx.config({
        debug: false,
        appId: data.appId,
        nonceStr: data.nonceStr,
        timestamp: data.timestamp,
        signature: data.signature,
        jsApiList: apis
      })
      wx.ready(() => {
        wx.error(reject), resolve()
      })
    })

    // 鉴权后的业务
    // ...
  } catch (e) {
    // 鉴权失败的操作
    // ...
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏