/**
* 将回调地狱转换为 Promise 形式
* https://blog.csdn.net/SEAYEHIN/article/details/88663740
* raw:
wx.downloadFile({
url: this.data.curImg,
success: res => {
console.log(20191121213856, res)
}
}) now:
async go() {
const downloadFile = this.app.pm(wx.downloadFile)
const res = await downloadFile({ url: this.data.curImg })
console.log(20191121212742, res)
} fixbug: 『this._invokeMethod is not a function』 —— 用.bind(ctx) 的方式解决 如果是wx内置函数,直接使用即可,但部分API是实例API,譬如 this.ctx = wx.createCameraContext()
this.ctx.takePhoto 如果你使用这样的方式开发的话,必定会出现上述的问题。
const takePhoto = this.app.pm(this.ctx.takePhoto)
await takePhoto() // this._invokeMethod is not a function 原因其实也简单,执行的时候上下文不是实例本身,所以我们还给它即可。
const takePhoto = this.app.pm(this.ctx.takePhoto.bind(this.ctx))
await takePhoto()
*/
const pm = api => (options, ...params) => new Promise((resolve, reject) => api({ ...options, success: resolve, fail: reject }, ...params))

微信小程序:用 Promise 解决方案代替回调地狱。 修复 this._invokeMethod is not a function 的问题的更多相关文章

  1. 微信小程序中promise的使用

    简介 相信看到这篇文章的同学,都已经对微信小程序的api文档有所了解了,也都经历了微信小程序api回调函数嵌套的痛苦,才会想要通过Promise解决回调地狱这个问题,我下面就直接介绍怎么在小程序中使用 ...

  2. 微信小程序 textarea 简易解决方案

    微信小程序中textarea没有bindchange事件,所以无法在输入时给变量赋值. 虽然可以使用bindblur事件,但是绑定bindblur事件,如果再点击按钮,则先执行完按钮事件后,再去执行b ...

  3. 微信小程序 bug及解决方案

    1.小程序遮罩滚动穿透问题 解决方案: <view class="mask" wx:if="{{showVipRights}}" catchtap='hi ...

  4. [转]微信小程序 c#后台支付结果回调

    本文转自:http://www.cnblogs.com/weizhiing/p/7700723.html 又为大家带来简单的c#后台支付结果回调方法,首先还是要去微信官网下载模板(WxPayAPI), ...

  5. 微信小程序 c#后台支付结果回调

    又为大家带来简单的c#后台支付结果回调方法,首先还是要去微信官网下载模板(WxPayAPI),将模板(WxPayAPI)添加到服务器上,然后在打开WxPayAPI项目中的example文件下的 Nat ...

  6. 微信小程序支付结果 c#后台回调

    又为大家带来简单的c#后台支付结果回调方法,首先还是要去微信官网下载模板(WxPayAPI),将模板(WxPayAPI)添加到服务器上,然后在打开WxPayAPI项目中的example文件下的 Nat ...

  7. 微信小程序前端promise封装

    config.js const config = { base_url_api : "https://douban.uieee.com/v2/movie/", } export { ...

  8. 微信小程序学习指南

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  9. 微信小程序学习记录(一)

    如何定义一个全局变量: 1,在根目录下app.js中添加 App({ globalData: { g_isPlayingMusic : false, g_currentMusicPostId :nul ...

随机推荐

  1. 06-Vue路由

    什么是路由 对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源: 对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有 ...

  2. 联想ideapad-330C 在Ubuntu18.04 上安装Realtek 8821CE无线网卡驱动

    在新买的联想ideapad-330C笔记本上,安装Ubuntu 18.04后,悲催的发现,没有无线网络,幸好有线还能用,然后网上搜一波,发现不少人遇到这种问题,也有人给出解决方案 参考的链接: Thi ...

  3. golang之数据转换

    golang按位取反符号和异或符号都是^. fmt.Printf("0x%X\n", 0xFF^0x55) var a uint8 = 0x55 fmt.Printf(" ...

  4. Spark-Bench 测试教程

    Spark-Bench 教程 本文原始地址:https://sitoi.cn/posts/19752.html 系统环境配置 操作系统:centos7 环境要求:安装 JDK, Hadoop, Spa ...

  5. 第十周LINUX 学习笔记

    LVS集群nat丶DR HA:高可用    平均无故障时间/(平均无故障时间+平均修复时间)        负载均衡 次序lb(负载)——>ha()LB  tcp:lvs,haproxy  应用 ...

  6. Centos7永久修改IP地址(NAT模式)

    永久修改IP地址,即为设置静态的IP地址. 一.修改IP地址前需要准备的工作 1.虚拟机需要使用NAT的网络模式 虚拟机关机状态下,点击"编辑虚拟机设置",点击"网络适配 ...

  7. Linux必知必会--awk

    弱者,是没有资格要求公平的. --<秦时明月>卫庄 参考文献: http://www.ruanyifeng.com/blog/2018/11/awk.html 阮一峰 https://ww ...

  8. js图片转为base64的格式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. ReadIniTest_GetPrivateProfileString

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...

  10. reactNative 获取组件高、宽、位置等信息

    import {findNodeHandle, UIManager} from 'react-native' layout(ref) { const handle = findNodeHandle(r ...