0

微信小程序分享时会调用 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
    }
}
2018-12-05 提问

查看全部 5 个回答

0

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

推荐答案

1

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

$.ajaxSetup({
    async: false
});

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

你可能感兴趣的

推广链接