微信小程序分享时会调用 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
}
}
把ajax请求换成同步的试试?jquery可以这么设置:
另,async 方法,别人调用的时候,会立刻返回一个Promise,而你写在代码里的return,则是在返回的那个Primise.then里获取的。微信调用这个方法拿的是返回值,也就是一个Promise,而Promise里没有他需要的那些参数,所以就是默认的分享了。
换句话说,这个Share回调不允许有异步操作。能改成同步就改,不能改的话,就得改代码逻辑了。