评论

将小程序原生异步函数promisify后,在async/await中使用

将小程序原生的异步函数同步化。

app.js代码:

function promisify(api) {
  return (opt, ...arg) => {
    return new Promise((resolve, reject) => {
      api(Object.assign({}, opt, { success: resolve, fail: reject }), ...arg)
    })
  }
}
App({
  globalData: {},
  chooseImage: promisify(wx.chooseImage),
  request: promisify(wx.request),
  getUserInfo: promisify(wx.getUserInfo),
  onLaunch: function () {
  },
})


某page的index.js代码:

testAsync: async  function(){
  let res = await app.chooseImage()
  console.log(res)
  res = await app.request({url:'url',method:'POST',data:{x:0,y:1}})
  console.log(res)
},


最后一次编辑于  11-06  (未经腾讯允许,不得转载)
点赞 5
收藏
评论

5 个评论

  • 姜龙
    姜龙
    10-31

    跟开发工具版本有关系吗,我的报错,我的版本是RC v1.02.1910121

    10-31
    赞同
    回复 4
    • 老张
      老张
      10-31
      保密吗?错误原因?
      10-31
      回复
    • 姜龙
      姜龙
      10-31回复老张
      这是报错的原因的提示
      10-31
      回复
    • 老张
      老张
      11-01回复姜龙
      抄代码都不会啊,async呢?
      11-01
      回复
    • 姜龙
      姜龙
      11-01回复老张
      不好意思,没看到
      11-01
      回复
  • Lemon
    Lemon
    10-24

    没有同步请求的例子?

    10-24
    赞同
    回复 5
    • 老张
      老张
      10-24
      let options = {...}; let res = await app.request(options)
      10-24
      回复
    • Lemon
      Lemon
      10-24回复老张
      没看懂,URL,请求的类型(get,post),怎么传?以及请求成功之后参数的获取
      10-24
      回复
    • 老张
      老张
      10-24回复Lemon
      let options = {url:'url', method:'POST',data:{x,y}}
      10-24
      回复
    • 老张
      老张
      10-24回复Lemon
      成功之后的参数,自己log(res)来看。
      10-24
      回复
    • Lemon
      Lemon
      10-24回复老张
      非常感谢,尝试了一下通了,在写逻辑,谢谢!
      10-24
      回复
  • alan🤫
    alan🤫
    10-16

    那也还是要打开增强编译才能用呀

    10-16
    赞同
    回复 1
    • 老张
      老张
      10-16
      我没开增强编译,没出错。
      10-16
      回复
  • Alice
    Alice
    10-16

    请问try是怎么用呢?我这里总是报错,在用到的js里面报js is not dedined

    10-16
    赞同
    回复 1
    • 老张
      老张
      10-16
      try的用法是基本语法,百度个教程学学吧。
      10-16
      回复
  • \
    \
    10-16

    学到了

    10-16
    赞同
    回复