微信小程序分享时,需要调用一个ajax(Promise)请求,然后return 一个对象,怎么同步实现?

微信小程序分享时会调用 onShareAppMessage 方法,他会return 一个对象作为分享时的参数。但是我需要在他return之前调用一个ajax方法,怎么样同步实现?

  • 用async await 实现有问题,代码和错误结论如下
onShareAppMessage: async function(res) {
    let url = await getCache({key:"WebViewUrl",trafficId:wx.getStorageSync('miniId')})
    ...
    return {
      title: title,
      path: url
    }
}
结论:不能用async await 。 如果 onShareAppMessage 是async函数,分享时会调用这个方法,但是分享的事件是走的默认的分享,没用使用我return的参数对象
  • 现在的问题,怎么让下班的代码同步实现。return的对象不能写到请求方法的 .then 方法里面,否者也会出现上面的问题:方法会被调用,但是分享事件没有用return的参数。
onShareAppMessage:function(res) {
    let url;
    getCache({key:"WebViewUrl",trafficId:wx.getStorageSync('miniId')}).then(cache =>{
        url = cache
    })
    return {
      title: title,
      path: url
    }
}
阅读 6.5k
6 个回答

把ajax请求换成同步的试试?jquery可以这么设置:

$.ajaxSetup({
    async: false
});

另,async 方法,别人调用的时候,会立刻返回一个Promise,而你写在代码里的return,则是在返回的那个Primise.then里获取的。微信调用这个方法拿的是返回值,也就是一个Promise,而Promise里没有他需要的那些参数,所以就是默认的分享了。
换句话说,这个Share回调不允许有异步操作。能改成同步就改,不能改的话,就得改代码逻辑了。

不可以在页面加载的时候先请求好数据,存在data里吗

小程序开发体验比差如狗。

你写个阻塞的函数不就好了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题