评论

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

将小程序原生的异步函数同步化。最近更新:原生的函数已经大部分同时原生支持同步化了,不需要本方案转化了。

目前,小程序中支持使用async/await有三种模式:

1、不勾选es6转es5,不勾选增强编译;该模式是纯es7的async/await,需要基础库高版本。

2、勾选es6转es5,勾选增强编译;一般是因为调用了第三方的es5插件,通过增强编译支持async/await。

3、勾选es6转es5,不勾选增强编译;手工引入runtime.js支持async/await。

据最近更新情况,原生的函数已经大部分同时原生支持同步化了,不需要本方案转化了,直接加上await即可;比如wx.chooseImage、wx.showModal。。。具体有哪些,可以自己试。

如果只是wx.request的同步化,可参考:

https://developers.weixin.qq.com/community/develop/article/doc/0004cc839407a069f77a416c056813



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代码:

const app = getApp()
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)
},

最后一次编辑于  2020-10-20  
点赞 18
收藏
评论

14 个评论

  • Lemon
    Lemon
    2019-10-24

    没有同步请求的例子?

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

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

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

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

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

    学到了

    2019-10-16
    赞同
    回复

正在加载...

登录 后发表内容