收藏
回答

onShareAppMessage 处理多个顺序异步请求能且只能执行一个

框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
小程序 Bug onShareAppMessage 客户端 iOS 6.6.6 1.9.9
onShareAppMessage() {
    // 生成带场景值的小程序码
    entry.generationMiniProgramCode(path, JSON.stringify(param), result => {
      let o = {
        title: 'VIP微课,音乐人的在线大学',
        // path: path + '?scene=' + result.scene,
        success(res) {
          console.log('分享success')
          console.log(res)
          // 记录用户分享行为
          entry.postUserShare(path, result.scene, shareResult => {
            wx.showToast({
              title: '分享成功',
              icon: 'none',
            })
          })
        },
        fail(res) {
          console.log('fail')
        }
      }
      return o
    })
  }


回答关注问题邀请回答
收藏

2 个回答

  • HS
    HS
    2018-05-16

    onShareAppMessage 是要求立即返回一个对象的,不会等待 Promise 的结果。建议你提前把结果存起来,在这个函数直接 return。onShareAppMessage 的函数签名是


    (options?: {from: string, options?: any}) => {title?: string, path?: string, imageUrl?: string} | undefined



    而你写的这个函数的签名是


    () => Promise<{title: string, success: Function, fail: Function}>



    显然是不一样的。

    2018-05-16
    有用 2
    回复 1
    • 阳光海
      阳光海
      2020-05-19
      sb官方
      2020-05-19
      回复
  • Elliot
    Elliot
    2018-05-16

    return 后的数据需要另一个异步请求获取,现在情况是一旦onShareAppMessage触发就执行其上一层异步回调。

    onShareAppMessage() {
        // 生成带场景值的小程序码
        let path = '/pages/index/index'
        let userId = wx.getStorageSync('USERID');
        let param = {
          "userId": userId
        }
        let a = new Promise((res, rej) => {
          entry.generationMiniProgramCode(path, JSON.stringify(param), result => {
            path = path + '?scene=' + result.scene
            return res(path)
          })
        })
        a.then(path => {
          console.log(path)
          return {
            title: 'VIP微课,音乐人的在线大学',
            // path: path + '?scene=' + result.scene,
            success(res) {
              console.log('分享success')
              console.log(res)
              // 记录用户分享行为
              entry.postUserShare(path, 1213, shareResult => {
                wx.showToast({
                  title: '分享成功',
                  icon: 'none',
                })
              })
            },
            fail(res) {
              console.log('fail')
            }
          }
        })

    换成promise的方式也不行。

    2018-05-16
    有用
    回复 1
    • HS
      HS
      2018-05-16
      已经修改回答了,可以参考一下。
      2018-05-16
      回复
登录 后发表内容