记录一次微信h5开发 使用js-sdk的过程(填异步串行的智商坑)

1. 安装jweixin-module这个包

npm install jweixin-module --save

2. 写一个单独的js文件来定义初始化配置及其他方法

// jwx.js
let jweixin = require('jweixin-module')
import { getSignature } from '@/api/index.js' // 从后端获取签名


export default {
    // 检测是否在微信浏览器内 
    isWechat: function() {
		var ua = window.navigator.userAgent.toLowerCase()
		if(ua.match(/micromessenger/i) == 'micromessenger') {
			return true
		}else{
			return false
		}
	},
    // 检测api是否可用 
    checkJsApi: function() {
		jweixin.checkJsApi({
			jsApiList: ['getLocalImgData'], // 需要检测的 JS 接口列表
			success: function(res) {
                console.log(res)
				// 以键值对的形式返回,可用的 api 值true,不可用为false
			}
		})
	},
    // 初始化配置
    initJssdk: function(callback) {
		//获取当前url然后传递给后台获取授权和签名信息
		getSignature().then(res => {
			//注入config权限配置
			jweixin.config({
				debug: false,
				appId: res.data.data.appId,
				timestamp: res.data.data.timestamp,
				nonceStr: res.data.data.nonceStr,
				signature: res.data.data.signature,
				jsApiList: ['getLocalImgData','chooseImage','checkJsApi']
			});
			if (callback) {
				callback(res.data);
			}
		})
	}
}

3. main.js全局引入

Vue.prototype.$jwx = jwx

4. ===================坑===================

主要是自己对程序的理解不够

这里我用的是wx.chooseImage选择相册及相机图片,会返回本地图片id列表,然后调用wx.getLocalImgData来获取本地图片的base64格式,最后转成文件对象,存到oss

- 原来的代码就是循环本地图片id列表 但是发现 选择一张图片可以 但选两张就不行了,会报错,于是我就想这个getLocalImgData有可能是异步的,于是使用这种递归方法去串行调用

syncUpload(localIds){
	let localId = localIds.pop()
	let _this = this
	_this.$jwx.getLocalImgData(localId).then(res1 => {
		uni.uploadFile({
			url: _this.$urls,
			file: res1,
			name: 'file', 
			success(res2) {
				// 业务代码
                if(localIds.length > 0) _this.syncUpload(localIds)
			}
		})
	})
}

5. 最后成功,成功的代价是 想到这个异步用了3个小时的时间(加上中午没睡觉)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萨科学习之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值